当关闭PrintStream时,JVM_Close返回-1
问题描述:
我对Java不太熟练。当关闭PrintStream时,JVM_Close返回-1
我将一个字节数组转换为一个字符串(每个字节有一个十进制表示),然后写入一个文件。这里是再现的是我有(我已经离开了文件命名的东西,以防万一它相关的)问题的一个小例子:
public class PacketWriter {
public static void writeBytes(byte[] in) {
Calendar cal = Calendar.getInstance();
cal.getTime();
SimpleDateFormat sdf = new SimpleDateFormat("ddmmyyHHmmss");
PrintStream out = null;
File outFile = null;
try {
outFile = new File("recpacket"+sdf.format(cal.getTime())+".txt");
outFile.createNewFile(); // also checks for existence of file alre ady
out = new PrintStream(new FileOutputStream(outFile,false));
System.out.println(Arrays.toString(in));
out.print(Arrays.toString(in));
out.flush();
System.out.println("Did the writing!");
} catch (FileNotFoundException e) {
System.err.println("Packet output file not found.");
} catch (IOException e) {
System.err.println("Could not write packets (I/O error).");
}
finally {
System.out.println("Closing...");
if (out != null) out.close();
System.out.println("Closed.");
}
}
}
当我打电话PacketWriter.writeBytes(/* some nonempty byte array */)
我得到以下的输出:
... array ...
Did the writing!
Closing...
JVM_Close returned -1
Closed.
写入标准输出。
返回时该文件为空,并且不包含我想要的字符串。
怎么回事?
答
PrintStream
类的错误报告很差:看起来写入文件失败,但不可能知道原因;这可能是因为文件系统中没有剩余空间。尝试使用FileWriter
代替:
Writer out = null;
out = new FileWriter(outFile,false);
System.out.println(Arrays.toString(in));
out.write(Arrays.toString(in));
out.flush();
检查您输入传递给writeBytes功能,因为我与你的代码试了一下它的工作很好,也写在文件 – Vijay
由于数据。输入很好 - 它将数组成功地打印到标准输出。我不知道这是否是某种文件权限错误?我以root身份运行JVM(出于其他原因),所以这可能是问题的一部分? – Froskoy