Reputation: 20575
I am wanting to pipe the Java console output (generated by System.out.println
and its ilk) to a file. I found an excellent solution here to enable Java tracing, but this isn't working for me (no log file shows up in any location on Mac OS X or Windows). From what I can tell, this is because I'm using a plain Java app without Java web start. So how can I do this with Java code that does not use Java web start? Ideally, I would like a solution that does not require modifying code.
Upvotes: 10
Views: 46931
Reputation: 279960
You don't require Java web start to do any of this. Just set the System.out
to a FileOutputStream
.
System.setOut(new PrintStream(new FileOutputStream(fileName)));
where fileName
is the full path to the file you want to pipe to.
public static void main(String[] args) throws Exception {
System.setOut(new PrintStream(new FileOutputStream("home.txt")));
System.out.println("hello");
}
This will write hello\n
to a file named home.txt
in the current working directory.
If you can't modify code, on Windows 7, use command redirection.
java YourMainClass > home.txt
If you need to run a jar, you can use the -jar
option of the java application launcher.
java -jar /your/path.jar > /output/file/path.txt
Upvotes: 16
Reputation: 11
If you want to run the problem in the background, do this -
nohup java -jar yourprogram.jar > log.txt 2>&1 &
Upvotes: 1
Reputation: 718798
Is there any way that I can do it without modifying code? I'd like to do it for an application that is already compiled.
If you want to do it without changing code, then your best option is this:
$ java com.example.MyMainClass > filename
Upvotes: 1
Reputation: 4901
If you launch it from command line, then you can use redirect stdout and stderr into file as follows:
java -jar application.jar >file.txt 2>&1
where you have to replace application.jar with the jar file of your application.
Upvotes: 24