I / O不工作(复制文件,粘贴它)

时间:2013-03-20 22:59:16

标签: java file-io

我正试图让这段代码起作用。它是一个基本的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");

3 个答案:

答案 0 :(得分:1)

在关闭OutputStream之前尝试执行fout.flush()

答案 1 :(得分:0)

...或者不要发明重新发明轮子:使用来自经验证的Apache commons-io的FileUtils.copyFile,它在一行中完成。

(注意:这个评论并不像看起来那么无辜:File.rename在Windows共享上效果不佳 - commons-io 总是做这些事情的安全赌注)< / p>

修改

  1. Stackoverflow不是“家庭作业”的goog地方 - 或者你必须至少这么说。这不是你的问题不是真的。这是你的目标不同:你想要学习一些东西,我们希望以最少的维护使其可靠地工作。
  2. ......这导致了我的第二点:当你在职业生涯中时,再也不要编程。正如您所发现的那样,即使您使其工作,也可能效率极低,错误地处理错误等等。对于IO来说尤其如此,总是比看起来更棘手。
  3. 最后,既然我在Apache 2.0许可下给你一个信任良好的库的链接,也许你可以查看source code

答案 2 :(得分:0)

好的,所以我发现了发生了什么。是一个非常不正常的错误。

我会把自己的骄傲放在一边,任何人都有这个问题。它不是一个无限循环,只是使用ByteStreams复制需要AGES。我期待小图像文件的快速结果,但即使是小图像文件也需要很长时间才能复制。我让它运行30秒,程序正常终止,我的图像副本就好了。

感谢上帝,它已经解决了,我开始担心了。