Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    reindirizzare e leggere da file di testo

    salve a tutti! So che forse darò noia con questa domanda, anche se sto leggendo la guida in http://java.html.it/guide/leggi/22/guida-java/ non riesco a trovare informazione su quello che mi serve. Spero mi potrete dare una mano..
    ho una funzione print che mi stampa il contenuto di una struttura dati (tante matrici), ma vorrei poter reindirizzare questa funzione basata su System.out.print e System.out.println in un file output di testo e salvarlo in una cartella sul mio desktop. Il risultato che vorrei ottenere è quello simile alla reindirizzazione che faccio dalla mia console in linux tipo cc tst.c > tst.text; ma siccome sono in windows e uso Eclipse (e non la console) per compilare e inviare in run il mio programma, vi chiedo come posso modificare la mia funzione print?
    **************
    ..........
    for (int i = 0; i < k; i++) {
    print(mat[i]);
    }

    private static void print(int[][] mat) {
    System.out.println();
    for (int f = 0; f < mat.length; f++) {
    for (int c = 0; c < mat[f].length; c++) {
    System.out.print(mat[f][c]+" ");
    }
    System.out.println();
    }
    }


    //Insomma vorrei creare un file di testo con tutte le k matrici che ho creato. Si può fa?

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: reindirizzare e leggere da file di testo

    Originariamente inviato da chongosnow
    ho una funzione print che mi stampa il contenuto di una struttura dati (tante matrici), ma vorrei poter reindirizzare questa funzione basata su System.out.print e System.out.println in un file output di testo e salvarlo in una cartella sul mio desktop. Il risultato che vorrei ottenere è quello simile alla reindirizzazione che faccio dalla mia console in linux tipo cc tst.c > tst.text; ma siccome sono in windows e uso Eclipse (e non la console) per compilare e inviare in run il mio programma, vi chiedo come posso modificare la mia funzione print?
    Dipende un po' da cosa vuoi/puoi fare.


    Soluzione A:
    Crei un PrintStream

    PrintStream ps = new PrintStream ("file.txt");

    e invece di fare System.out.println() fai ps.println()


    Soluzione B:
    Crei inizialmente sempre un PrintStream (come sopra) ma lo imposti come standard-output con

    System.setOut (tuoPrintStream);

    in questo modo tutti gli output fatti in seguito con System.out andranno sul file.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    ciao andbin, grazie per il tuo suggerimento.
    al inizio non funzionava come volevo; visto che alla fine il file.txt conteneva solo la ultima matrice, ovvero
    *****************
    k=4;
    int [][][] mat;
    for (int i = 0; i < k; i++) {
    print(mat[i]);
    }

    private static void print(int[][] mat) {
    PrintStream ps = new PrintStream ("file.txt");
    e invece di fare System.out.println() fai ps.println()

    for (int f = 0; f < mat.length; f++) {
    for (int c = 0; c < mat[f].length; c++) {
    ps.print(mat[f][c]+" ");
    }
    ps.println();
    }
    }

    ***********
    insomma mi stampava sul file la ultima matrice ovvero mat[4] invece mi aspettavo che il file.txt contenesse tutte le matrice generate col primo for

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da chongosnow
    ciao andbin, grazie per il tuo suggerimento.
    al inizio non funzionava come volevo; visto che alla fine il file.txt conteneva solo la ultima matrice
    Questione di buffering! Alla fine chiudi lo stream (metodo close() )
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    ciao..
    infatti ho pensato alla questione Buffering e mi sono chiesto se invece dovevo prima (o dopo) creare uno BufferStream. Ho anche, come mi dici, di chiedere lo stream con ps.close();
    ma non mi cambiava l'ouput, ovvero mi continuava a scrivere sul file solo la ultima matrice generata dal for più in alto. Forse sbaglio dove ho chiuso lo stream?
    ****************************************
    for (int i = 0; i < k; i++) {
    print(mat[i]);
    }

    private static void print(int[][] mat) {
    PrintStream ps = new PrintStream ("file.txt");
    e invece di fare System.out.println() fai ps.println()

    for (int f = 0; f < mat.length; f++) {
    for (int c = 0; c < mat[f].length; c++) {
    ps.print(mat[f][c]+" ");
    }
    ps.println();
    }
    ps.close();
    }

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da chongosnow
    ciao..
    infatti ho pensato alla questione Buffering e mi sono chiesto se invece dovevo prima (o dopo) creare uno BufferStream. Ho anche, come mi dici, di chiedere lo stream con ps.close();
    ma non mi cambiava l'ouput, ovvero mi continuava a scrivere sul file solo la ultima matrice generata dal for più in alto. Forse sbaglio dove ho chiuso lo stream?
    ah beh, certo! ... ho letto meglio adesso il tuo codice. Fai un ciclo in cui chiami più volte il tuo metodo print(). Ma quando apri il file, lui sovrascrive!!!

    Apri "a monte" il PrintStream e lo passi volta per volta al tuo metodo. Ma ci sarebbero anche altre possibilità, come usare sempre PrintStream ma facendo il "chaining" con un FileOutputStream creato con il costruttore a cui si può specificare di fare l'append.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    ciao,
    comunque ho risolto modificando la mia funzione print aggiungendo un altro for per un'altro indice, ovvero mat[i][j][k].

    grazie!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.