Hoe console-uitvoer naar een txt-bestand te schrijven

Ik heb geprobeerd de console-uitvoer naar een txt-bestand te schrijven met behulp van deze codesuggestie (http: //www.daniweb.com/forums/thread23883.html#) maar ik was niet succesvol. Wat is er aan de hand?

try {
      //create a buffered reader that connects to the console, we use it so we can read lines
      BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
      //read a line from the console
      String lineFromInput = in.readLine();
      //create an print writer for writing to a file
      PrintWriter out = new PrintWriter(new FileWriter("output.txt"));
      //output to the file a line
      out.println(lineFromInput);
      //close the file (VERY IMPORTANT!)
      out.close();
   }
      catch(IOException e1) {
        System.out.println("Error during reading/writing");
   }

Antwoord 1, autoriteit 100%

Je moet zoiets als dit doen:

PrintStream out = new PrintStream(new FileOutputStream("output.txt"));
System.setOut(out);

De tweede instructie is de sleutel. Het verandert de waarde van het zogenaamd “definitieve” kenmerk System.outin de opgegeven PrintStream-waarde.

Er zijn analoge methoden (setInen setErr) voor het wijzigen van de standaard invoer- en foutstromen; raadpleeg de javadocs van java.lang.Systemvoor details.

Een meer algemene versie van het bovenstaande is deze:

PrintStream out = new PrintStream(
        new FileOutputStream("output.txt", append), autoFlush);
System.setOut(out);

Als appendtrueis, wordt de stream toegevoegd aan een bestaand bestand in plaats van het af te kappen. Als autoflushtrueis, wordt de uitvoerbuffer leeggemaakt telkens wanneer een bytearray wordt geschreven, een van de println-methoden wordt aangeroepen, of een \nis geschreven.


Ik wil er alleen aan toevoegen dat het meestal een beter idee is om een ​​subsysteem voor logboekregistratie te gebruiken, zoals Log4j, Logbackof de standaard Java java.util.loggingsubsysteem. Deze bieden fijnmazige controle over logboekregistratie via runtime-configuratiebestanden, ondersteuning voor doorlopende logboekbestanden, feeds naar systeemregistratie, enzovoort.

Als u niet “logt”, overweeg dan het volgende:

  • Met typische shells kun je standaarduitvoer (of standaardfout) omleiden naar een bestand op de opdrachtregel; bijv.

    $ java MyApp > output.txt   
    

    Raadpleeg voor meer informatie een shell-tutorial of handmatige invoer.

  • U kunt uw toepassing wijzigen om een ​​out-stroom te gebruiken die is doorgegeven als een methodeparameter of via een singleton- of afhankelijkheidsinjectie in plaats van te schrijven naar System.out.

Het wijzigen van System.outkan vervelende verrassingen veroorzaken voor andere code in uw JVM die dit niet verwacht. (Een goed ontworpen Java-bibliotheek is afhankelijk van System.outen System.err, maar je kunt pech hebben.)


Antwoord 2, autoriteit 28%

Het is niet nodig om code te schrijven, alleen in cmd
op de console kun je schrijven:

javac myFile.java
java ClassName > a.txt

De uitvoergegevens worden opgeslagen in het a.txt-bestand.


Antwoord 3, autoriteit 20%

om de uitvoer van de console te behouden, dat wil zeggen, naar een bestand te schrijven en het ook op de console te laten weergeven, kunt u een klasse gebruiken zoals:

   public class TeePrintStream extends PrintStream {
        private final PrintStream second;
        public TeePrintStream(OutputStream main, PrintStream second) {
            super(main);
            this.second = second;
        }
        /**
         * Closes the main stream. 
         * The second stream is just flushed but <b>not</b> closed.
         * @see java.io.PrintStream#close()
         */
        @Override
        public void close() {
            // just for documentation
            super.close();
        }
        @Override
        public void flush() {
            super.flush();
            second.flush();
        }
        @Override
        public void write(byte[] buf, int off, int len) {
            super.write(buf, off, len);
            second.write(buf, off, len);
        }
        @Override
        public void write(int b) {
            super.write(b);
            second.write(b);
        }
        @Override
        public void write(byte[] b) throws IOException {
            super.write(b);
            second.write(b);
        }
    }

en gebruikt als in:

   FileOutputStream file = new FileOutputStream("test.txt");
    TeePrintStream tee = new TeePrintStream(file, System.out);
    System.setOut(tee);

(slechts een idee, niet compleet)


Antwoord 4, autoriteit 9%

Maak de volgende methode:

public class Logger {
    public static void log(String message) { 
      PrintWriter out = new PrintWriter(new FileWriter("output.txt", true), true);
      out.write(message);
      out.close();
    }
}

(Ik heb niet de juiste IO-afhandeling in de bovenstaande klasse opgenomen en het compileert niet – doe het zelf. Overweeg ook om de bestandsnaam te configureren. Let op het argument “true”. Dit betekent dat het bestand niet elke keer dat u de methode aanroept opnieuw gemaakt)

Bel dan in plaats van System.out.println(str)Logger.log(str)

aan

Deze handmatige aanpak verdient niet de voorkeur. Gebruik een logging-framework – slf4j, log4j, commons-loggingen nog veel meer


Antwoord 5, autoriteit 6%

Naast de verschillende besproken programmatische benaderingen, is een andere optie om standaarduitvoer van de shell om te leiden. Hier zijn verschillende Unixen DOSvoorbeelden.


Antwoord 6, autoriteit 3%

U kunt System.setOut()aan het begin van uw programma om alle uitvoer via System.outom te leiden naar uw eigen PrintStream.


Antwoord 7, autoriteit 2%

Dit is mijn idee van wat je probeert te doen en het werkt prima:

public static void main(String[] args) throws IOException{
    BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
    BufferedWriter out = new BufferedWriter(new FileWriter("c://output.txt"));
    try {
        String inputLine = null;
        do {
            inputLine=in.readLine();
            out.write(inputLine);
            out.newLine();
        } while (!inputLine.equalsIgnoreCase("eof"));
        System.out.print("Write Successful");
    } catch(IOException e1) {
        System.out.println("Error during reading/writing");
    } finally {
        out.close();
        in.close();
    }
}

Antwoord 8, autoriteit 2%

De gemakkelijkste manier om console-uitvoer naar een tekstbestand te schrijven is

//create a file first    
    PrintWriter outputfile = new PrintWriter(filename);
//replace your System.out.print("your output");
    outputfile.print("your output");
    outputfile.close(); 

Antwoord 9

Om console-uitvoer naar een txt-bestand te schrijven

public static void main(String[] args) {
    int i;
    List<String> ls = new ArrayList<String>();
    for (i = 1; i <= 100; i++) {
        String str = null;
        str = +i + ":-  HOW TO WRITE A CONSOLE OUTPUT IN A TEXT FILE";
        ls.add(str);
    }
    String listString = "";
    for (String s : ls) {
        listString += s + "\n";
    }
    FileWriter writer = null;
    try {
        writer = new FileWriter("final.txt");
        writer.write(listString);
        writer.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

Als u de PDF wilt genereren in plaats van het tekstbestand, gebruikt u de onderstaande afhankelijkheid:

<dependency>
        <groupId>com.itextpdf</groupId>
        <artifactId>itextpdf</artifactId>
        <version>5.0.6</version>
</dependency>

Gebruik deze code om een ​​PDF te genereren:

public static void main(String[] args) {
    int i;
    List<String> ls = new ArrayList<String>();
    for (i = 1; i <= 100; i++) {
        String str = null;
        str = +i + ":- HOW TO WRITE A CONSOLE OUTPUT IN A PDF";
        ls.add(str);
    }
    String listString = "";
    for (String s : ls) {
        listString += s + "\n";
    }
    Document document = new Document();
    try {
        PdfWriter writer1 = PdfWriter
                .getInstance(
                        document,
                        new FileOutputStream(
                                "final_pdf.pdf"));
        document.open();
        document.add(new Paragraph(listString));
        document.close();
        writer1.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (DocumentException e) {
        e.printStackTrace();
    }
}

Antwoord 10

PrintWriter out = null;
try {
    out = new PrintWriter(new FileWriter("C:\\testing.txt"));
    } catch (IOException e) {
            e.printStackTrace();
    }
out.println("output");
out.close();

Ik gebruik een absoluut pad voor de FileWriter. Het werkt voor mij als een tierelier. Zorg er ook voor dat het bestand op de locatie aanwezig is. Anders wordt een FileNotFoundException gegenereerd. Deze methode maakt geen nieuw bestand op de doellocatie als het bestand niet wordt gevonden.


Antwoord 11

In netbeans kunt u met de rechtermuisknop klikken en vervolgens opslaan als een .txt-bestand. Vervolgens kunt u op basis van het gemaakte .txt-bestand converteren naar het bestand in elke gewenste indeling.

Other episodes