2013-03-20 54 views
0

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

我已经将我的代码与the Oracle website上的Byte Streams教程进行了比较。

另外:我只是要求它输出它正在读取的内容,它被卡在一个无限循环上,读取值为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); 
      } 
     } 
    } 
} 

在我的程序主I类运行此:

fileUtil.copyFileTo("google.bmp", "google(1).bmp"); 

回答

0

好吧,所以我才知道发生了什么事。是一个真正的白痴错误。

我会把我的骄傲放在一边装箱任何人都有这个问题。这不是一个无限循环,而是使用ByteStreams进行复制需要AGES。我期望从小图像文件获得快速结果,但即使是小图像文件也需要很长时间进行复制。我让它运行了30秒,程序正常终止,我得到了我的图像复制就好了。

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

1

尝试做fout.flush()你关闭的OutputStream之前。

+0

没有工作抱歉。没有可观察到的差异,我在fin.close()之后添加它 – Phazor 2013-03-21 22:11:20

0

......或不发明麻烦重新发明轮子:使用FileUtils.copyFile从经过验证的Apache commons-io,它在一行中。

(注意:File.rename不能在Windows股很好地工作 - 公共-io的是总是安全的赌注,做这些事情:因为它似乎这个评论是不是无辜的)

编辑

  1. Stackoverflow不是一个“家庭作业”的地方 - 或者你至少应该这样说。这不是你的问题不是真实的。这是你的目标不同:你想学习一些东西,我们希望使它工作可靠,维护量最小。
  2. ......这引出了我的第二点:当你在职业生涯中时,不要再次编程。正如你发现的那样,即使你使它工作,它可能是非常低效的,错误地处理错误,等等。这是尤其是对于总是比看起来更棘手。
  3. 最后,因为我给你一个链接到Apache 2.0许可下的信任良好的库,也许你可以看看source code
+0

作为大学计算机科学系的学生,我需要知道文件输入和输出的全部过程。我不是在重新发明轮子,我确信我知道它是如何工作的。 – Phazor 2013-03-21 22:09:47

+0

查看我的评论编辑 – 2013-03-22 05:48:58

+0

这不是我的问题。我没有问过如何以最少的维护工作或甚至使其可靠地工作。我说,这是我的代码,它不起作用。我想知道为什么。 此外,这不是作业。你在大学没有做作业。这是研究,我的研究让我需要了解文件I/O。根本没有看到问题发布在这里。 – Phazor 2013-04-09 01:39:33