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



我正试图让这段代码工作。它是一个基本的I/O系统,复制一个文件并将其粘贴到具有所选名称的同一目录中。这应该很简单,但由于某些原因,程序运行时,它创建了第二个文件,但随后卡住了。Java进程的CPU占用率在5%左右,文件永远不会完成。它只复制了一些数据,然后我想象它在某个地方陷入了无限循环。

我已经将我的代码与Oracle网站上的字节流教程进行了比较。

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");

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

好了,我知道发生了什么。真是个愚蠢的错误。

如果别人也有这个问题,我就把自尊心放在一边。这不是一个无限循环,只是使用ByteStreams进行复制需要花费AGES。我期望从小图像文件中获得快速结果,但即使是小图像文件也需要很长时间才能复制。我让它运行30秒,程序正常终止,我得到了我的图像副本。

谢天谢地总算解决了,我还在担心呢

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

(注意:这个评论并不像看起来那么无辜:File.rename在Windows共享上不能很好地工作- commons-io是总是做这些事情的安全赌注)

编辑

  1. Stackoverflow不是一个"家庭作业"的好地方——或者你至少必须这么说。这并不是说你的问题不真实。这是你的目标不同:你想学习一些东西,我们想让它以最少的维护可靠地工作。
  2. …这就引出了我的第二点:当你在职业生涯中,永远不要再编写这样的程序。正如您所发现的那样,即使您使它工作,它也可能非常低效,处理错误不正确,等等。对于IO来说尤其如此,总是比看起来更棘手。
  3. 最后,既然我给了你一个链接到Apache 2.0许可下的一个很受信任的库,也许你可以看看源代码?

相关内容

  • 没有找到相关文章