我正试图让这段代码起作用。它是一个基本的I / O系统,它复制一个文件并将其粘贴到具有所选名称的同一目录中。它应该很简单,但由于某种原因程序运行,它会创建第二个文件,但随后它会卡住。 Java进程的CPU占5%左右,文件永远不会完成。它只复制了一些数据,然后我想它会陷入某个无限循环。
我已经将我的代码与the Oracle website上的Byte Streams教程进行了比较。
EXTRA:我刚刚要求它输出它正在读取的内容并且它被卡在无限循环上,读取值255
。如果这有帮助。此外,我直接在Oracle网站上编译代码,它也做了同样的事情。
从我所知道的看来,它似乎是一致的。谁能告诉我我做错了什么?谢谢。
(P.S:我正在使用Eclipse 4.2.0)。
这就是我要复制文件的目的:
package fileIO;
import java.io.*;
import system.Debug;
public class fileUtil {
public static void copyFileTo(String file2Copy, String file2Paste) {
FileInputStream fin = null;
FileOutputStream fout = null;
try {
fin = new FileInputStream(file2Copy);
fout = new FileOutputStream(file2Paste);
int aByte;
while ((aByte = fin.read()) != -1) {
fout.write(aByte);
}
} catch (FileNotFoundException e) {
Debug.out("Error: File Not Found: " + file2Copy);
} catch (IOException e) {
Debug.out("Error: File IO Exception Copying: " + file2Copy);
} catch (Exception e) {
Debug.out("Error: General Exception Closing Streams:" + file2Copy);
} finally {
try {
fin.close();
fout.close();
} catch (IOException e) {
Debug.out("Error: File IO Exception Closing Streams: " + file2Copy);
} catch (Exception e) {
Debug.out("Error: General Exception Closing Streams:" + file2Copy);
}
}
}
}
在我的程序主类我运行:
fileUtil.copyFileTo("google.bmp", "google(1).bmp");
答案 0 :(得分:1)
在关闭OutputStream之前尝试执行fout.flush()
。
答案 1 :(得分:0)
...或者不要发明重新发明轮子:使用来自经验证的Apache commons-io的FileUtils.copyFile,它在一行中完成。
(注意:这个评论并不像看起来那么无辜:File.rename
在Windows共享上效果不佳 - commons-io 总是做这些事情的安全赌注)< / p>
修改强>
答案 2 :(得分:0)
好的,所以我发现了发生了什么。是一个非常不正常的错误。
我会把自己的骄傲放在一边,任何人都有这个问题。它不是一个无限循环,只是使用ByteStreams复制需要AGES。我期待小图像文件的快速结果,但即使是小图像文件也需要很长时间才能复制。我让它运行30秒,程序正常终止,我的图像副本就好了。
感谢上帝,它已经解决了,我开始担心了。