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.out
in de opgegeven PrintStream-waarde.
Er zijn analoge methoden (setIn
en setErr
) voor het wijzigen van de standaard invoer- en foutstromen; raadpleeg de javadocs van java.lang.System
voor details.
Een meer algemene versie van het bovenstaande is deze:
PrintStream out = new PrintStream(
new FileOutputStream("output.txt", append), autoFlush);
System.setOut(out);
Als append
true
is, wordt de stream toegevoegd aan een bestaand bestand in plaats van het af te kappen. Als autoflush
true
is, wordt de uitvoerbuffer leeggemaakt telkens wanneer een bytearray wordt geschreven, een van de println
-methoden wordt aangeroepen, of een \n
is 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 naarSystem.out
.
Het wijzigen van System.out
kan vervelende verrassingen veroorzaken voor andere code in uw JVM die dit niet verwacht. (Een goed ontworpen Java-bibliotheek is afhankelijk van System.out
en 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.out
om 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.