Как написать вывод консоли в txt файл
Я попытался написать вывод консоли в 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");
}
Ответы
Ответ 1
Вам нужно сделать что-то вроде этого:
PrintStream out = new PrintStream(new FileOutputStream("output.txt"));
System.setOut(out);
Второе утверждение является ключевым. Он изменяет значение предположительно "окончательного" атрибута System.out
на предоставленное значение PrintStream.
Существуют аналогичные методы (setIn
и setErr
) для изменения стандартных потоков ввода и ошибок; за подробностями обращайтесь к javadocs java.lang.System
.
Более общая версия вышесказанного:
PrintStream out = new PrintStream(
new FileOutputStream("output.txt", append), autoFlush);
System.setOut(out);
Если append
равен true
, поток будет добавлять к существующему файлу вместо его усечения. Если autoflush
равно true
, выходной буфер будет очищаться при записи байтового массива, при вызове одного из методов println
или при записи \n
.
Я просто хотел бы добавить, что обычно лучше использовать подсистему ведения журналов, например Log4j, Logback или стандартную Java java.util.logging. подсистема. Они обеспечивают детальное управление журналированием с помощью файлов конфигурации времени выполнения, поддержку прокручиваемых файлов журналов, каналы в системном журнале и т.д.
Кроме того, если вы не "ведете журнал", подумайте о следующем:
С типичными оболочками вы можете перенаправить стандартный вывод (или стандартную ошибку) в файл в командной строке; например,
$ java MyApp > output.txt
Дополнительную информацию см. в руководстве по оболочке или в руководстве вручную.
Вы можете изменить свое приложение так, чтобы оно использовало поток out
, передаваемый в качестве параметра метода или посредством одиночного внедрения или внедрения зависимости, вместо записи в System.out
.
Изменение System.out
может вызвать неприятные сюрпризы для другого кода в вашей JVM, который не ожидает, что это произойдет. (Правильно спроектированная библиотека Java избежит зависимости от System.out
и System.err
, но вам может не повезти.)
Ответ 2
Нет необходимости писать какой-либо код, только в cmd
на консоли вы можете написать:
javac myFile.java
java ClassName > a.txt
Выходные данные сохраняются в файле a.txt.
Ответ 3
чтобы сохранить вывод консоли, то есть записать в файл, а также отобразить его на консоли, вы можете использовать класс, например:
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);
(просто идея, не полная)
Ответ 4
Создайте следующий метод:
public class Logger {
public static void log(String message) {
PrintWriter out = new PrintWriter(new FileWriter("output.txt", true), true);
out.write(message);
out.close();
}
}
(Я не включил правильную обработку ввода-вывода в вышеуказанный класс и не компилируется - сделайте это самостоятельно. Также подумайте о настройке имени файла. Обратите внимание на аргумент "true". воссоздается каждый раз, когда вы вызываете метод)
Затем вместо System.out.println(str)
вызов Logger.log(str)
Этот ручной подход не является предпочтительным. Используйте фреймворк регистрации - slf4j, log4j, commons-logging и многие другие.
Ответ 5
В дополнение к рассмотренным нескольким программным подходам другой вариант заключается в перенаправлении стандартного вывода из оболочки. Вот несколько примеров Unix и DOS.
Ответ 6
Вы можете использовать System.setOut() в начале вашей программы для перенаправления всего вывода через System.out
на свой собственный PrintStream
.
Ответ 7
Это мое представление о том, что вы пытаетесь сделать, и оно отлично работает:
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();
}
}
Ответ 8
Самый простой способ записать вывод консоли в текстовый файл
//create a file first
PrintWriter outputfile = new PrintWriter(filename);
//replace your System.out.print("your output");
outputfile.print("your output");
outputfile.close();
Ответ 9
Чтобы записать вывод консоли в файл 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();
}
}
Ответ 10
PrintWriter out = null;
try {
out = new PrintWriter(new FileWriter("C:\\testing.txt"));
} catch (IOException e) {
e.printStackTrace();
}
out.println("output");
out.close();
Я использую абсолютный путь для FileWriter. Он работает для меня как шарм. Также убедитесь, что файл присутствует в этом месте. Else Он выкинет исключение FileNotFoundException. Этот метод не создает новый файл в целевом местоположении, если файл не найден.
Ответ 11
В netbeans вы можете щелкнуть правой кнопкой мыши и затем сохранить как .txt файл. Затем, на основе созданного файла .txt, вы можете преобразовать его в любой формат, который вы хотите получить.