我使用ubuntu 14.04 fileinputstream,fileoutputstream存在很大问题?

时间:2014-08-28 21:22:35

标签: java ubuntu bufferedreader fileinputstream fileoutputstream

我使用的是Ubuntu 14.04,遇到FileInputStreamFileOutputStreamBufferedReaderBufferWriter的问题 这是我的项目。当我尝试将数据从一个文件复制到另一个文件时出现问题 代码:

try{
    File filename=new File(jttex1.getText());
    File nfile=new File(jttex2.getText());
    if(!filename.exists()){
        p("file is not found");
        return;
    }
    if(!nfile.exists()){
        p("file is not found");
        return;
    } 

    FileInputStream vinput=new FileInputStream(filename);
    FileOutputStream voutput=new FileOutputStream(nfile);  
    jsizee.setText("size"+vinput.available());
    byte[] buffer=new byte [50];
    int lenghtt=0;

    while ((vinput.read(buffer)) > 0);{
        voutput.write(buffer);
        vinput.close();
        voutput.close();
    }
}catch(IOException ee){
    System.err.println(ee.getMessage());

}
}
  

打开txt文件时出现问题   “/home/mizzz/netbeansprojects/fold2/fg2.txt”你打开的文件有   如果您继续此文件损坏了一些无效字符   文档您还可以选择其他字符编码,然后重试

     

/ 00/00/00/00/00/00/00/00/00/00/00/00/00/00/00/00/00/00 /

2 个答案:

答案 0 :(得分:3)

你的循环是完全错误的。你应该阅读一些IO教程。

while ((vinput.read(buffer)) > 0);{
        voutput.write(buffer);
        vinput.close();
        voutput.close();}

应该是

int bytes = 0;
while((bytes = vinput.read(buffer)) != -1) {
    voutput.write(buffer, 0, bytes);
}
vinput.close();
voutput.close();

答案 1 :(得分:0)

不,Ubuntu(或其他平台)上的Java文件I / O没有出现任何问题。

问题在于您的代码。只需使用copy()方法:

Path src = Paths.get(jttex1.getText());
Path dst = Paths.get(jttex2.getText());
jsizee.setText("size: " + Files.size(src));
Files.copy(src, dst);

如果您坚持将所有数据读入用户空间(Java代码中的字节数组),那么您需要正确打开和关闭文件。这看起来更像是这样:

Path src = Paths.get(jttex1.getText());
Path dst = Paths.get(jttex2.getText());
try (InputStream is = Files.newInputStream(src)) {
  byte[] buffer = new byte[8192];
  try (OutputStream os = Files.newOutputStream(dst)) {
    while (true) {
      int n = is.read(buffer);
      if (n < 0)
        break;
      os.write(buffer, 0, n);
    }
  }
}