我使用的是Ubuntu 14.04,遇到FileInputStream
,FileOutputStream
,BufferedReader
和BufferWriter
的问题
这是我的项目。当我尝试将数据从一个文件复制到另一个文件时出现问题
代码:
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 /
答案 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);
}
}
}