当关闭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. 

写入标准输出。

返回时该文件为空,并且不包含我想要的字符串。

怎么回事?

+1

检查您输入传递给writeBytes功能,因为我与你的代码试了一下它的工作很好,也写在文件 – Vijay

+0

由于数据。输入很好 - 它将数组成功地打印到标准输出。我不知道这是否是某种文件权限错误?我以root身份运行JVM(出于其他原因),所以这可能是问题的一部分? – Froskoy

PrintStream类的错误报告很差:看起来写入文件失败,但不可能知道原因;这可能是因为文件系统中没有剩余空间。尝试使用FileWriter代替:

Writer out = null; 

     out = new FileWriter(outFile,false); 
     System.out.println(Arrays.toString(in)); 
     out.write(Arrays.toString(in)); 
     out.flush(); 
+0

谢谢,现在我实际上得到了一个有用的错误。我得到java.io.IOException:超出了磁盘配额,但这很奇怪,因为我剩下很多磁盘空间了。但是,这与事实是一致的,这适用于较小的文件,但不适用于大文件,因此我会进一步调查。谢谢! – Froskoy

+0

您可以使用'quota'命令查找允许使用多少磁盘空间,如果您是系统管理员,则使用'quotaoff'禁用磁盘配额。不过,确切的细节取决于您拥有的Unix系统的种类。 – Joni