2013-03-20 56 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