Я попытался записать консольный вывод в txt файл с помощью этого предложения кода (http://www.daniweb.com/forums/thread23883.html#) однако, я не был успешен. Что случилось?
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");
}
Необходимо сделать что-то вроде этого:
PrintStream out = new PrintStream(new FileOutputStream("output.txt"));
System.setOut(out);
второй оператор является ключом. Это изменяет значение, предположительно, "окончательный" System.out
атрибут, чтобы быть предоставленным значением PrintStream.
существуют аналогичные методы (setIn
и setErr
) для изменения стандартного входа и потоков сообщений об ошибках; обратитесь к java.lang.System
javadocs для деталей.
А более общая версия вышеупомянутого - это:
PrintStream out = new PrintStream(
new FileOutputStream("output.txt", append), autoFlush);
System.setOut(out);
, Если append
true
, поток добавит в существующий файл вместо того, чтобы усечь его. Если autoflush
будет true
, то буфер вывода будет сброшен каждый раз, когда массив байтов записан, один из эти println
, методы называют, или \n
записан.
я был бы точно так же, как, чтобы добавить, что это обычно - лучшая идея использовать регистрирующуюся подсистему как [1 118] Log4j, Logback или стандартная подсистема Java java.util.logging . Они предлагают мелкомодульное управление входом через конфигурационные файлы во время выполнения, поддержку прокрутки файлов журнала, подачи к системному входу, и так далее.
, С другой стороны, если Вы не "регистрируетесь" затем, рассматривают следующее:
С типичными оболочками, Вы можете, перенаправляя стандартный вывод (или стандартная погрешность) в файл на командной строке; например,
$ java MyApp > output.txt
Для получения дополнительной информации, обратитесь к учебному руководству по оболочке или ручной записи.
Вы могли изменить свое приложение для использования out
, поток передал как параметр метода или через одиночный элемент или внедрение зависимости вместо того, чтобы писать в [1 114].
Изменение System.out
может вызвать противные неожиданности для другого кода в Вашей JVM, которая не ожидает, что это произойдет. (Правильно разработанная библиотека Java избежит в зависимости от [1 116] и System.err
, но Вы могли быть неудачными.)
Нет никакой потребности написать любой код, только в cmd на консоли, которую можно записать:
javac myFile.java
java ClassName > a.txt
выходные данные хранится в a.txt файле.
к сохраняют , консольный вывод, то есть, пишет в файл и также отобразил его на консоли, Вы могли использовать класс как:
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);
}
}
и используемый в качестве в:
FileOutputStream file = new FileOutputStream("test.txt");
TeePrintStream tee = new TeePrintStream(file, System.out);
System.setOut(tee);
( просто идея, не завершаются )
Создайте следующий метод:
public class Logger {
public static void log(String message) {
PrintWriter out = new PrintWriter(new FileWriter("output.txt", true), true);
out.write(message);
out.close();
}
}
(я не включал надлежащий IO, обрабатывающий в вышеупомянутый класс, и он не скомпилирует - делают это самостоятельно. Также рассмотрите конфигурирование имени файла. Отметьте "истинный" аргумент. Это означает, что файл не будет воссоздан каждый раз, когда Вы называете метод)
Затем вместо System.out.println(str)
вызов Logger.log(str)
, Этот ручной подход не предпочтителен. Используйте платформу журналирования - slf4j, log4j, вход свободного городского населения , и намного больше
В дополнение к нескольким программным обсужденным подходам другая опция состоит в том, чтобы перенаправить стандартный вывод от оболочки. Вот несколько Unix и DOS примеры.
Можно использовать System.setOut () в начале программы для перенаправления всего вывода через System.out
к собственному PrintStream
.
Это - моя идея того, что Вы пытаетесь сделать, и она хорошо работает:
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();
}
}
самый легкий способ записать консольный вывод в текстовый файл
//create a file first
PrintWriter outputfile = new PrintWriter(filename);
//replace your System.out.print("your output");
outputfile.print("your output");
outputfile.close();
Для записи консольного вывода в txt файл
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();
}
}
, Если Вы хотите генерировать PDF скорее затем текстовый файл Вы используете зависимость, данную ниже:
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.0.6</version>
</dependency>
Для генерации PDF используйте этот код:
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();
}
}
PrintWriter out = null;
try {
out = new PrintWriter(new FileWriter("C:\\testing.txt"));
} catch (IOException e) {
e.printStackTrace();
}
out.println("output");
out.close();
я использую полный путь для FileWriter. Это работает на меня как очарование. Также Удостоверьтесь, что файл присутствует в месте. Еще Это бросит FileNotFoundException. Этот метод не создает новый файл в целевом месте, если файл не найден.
В netbeans можно щелкнуть правой кнопкой по мыши и затем сохранить как .txt файл. Затем на основе созданного .txt файла можно преобразовать в файл в любом формате, который Вы хотите получить.