2016-10-10 102 views
1

我爲我的Java類指定了兩個文本文件。結合兩個文本文件的Java

這是我到目前爲止的代碼。

import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.FileReader; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.util.ArrayList; 

public class CombineTwoFile { 
    public static void main(String[] args) throws IOException 
    { 
     ArrayList<String> list = new ArrayList<String>(); 
     try 
     { 
      BufferedReader br = new BufferedReader(new FileReader("A.txt")); 
      BufferedReader r = new BufferedReader(new FileReader("B.txt")); 
      String s1 =null; 
      String s2 = null; 

      while ((s1 = br.readLine()) != null) 
      { 
       list.add(s1);   
      } 
      while((s2 = r.readLine()) != null) 
      { 
       list.add(s2); 
      } 
     } 
     catch (IOException e) 
     { 
      e.printStackTrace(); 
     } 

     BufferedWriter writer=null; 
     writer = new BufferedWriter(new FileWriter("B.txt")); 
     String listWord;    
     for (int i = 0; i< list.size(); i++) 
     { 
      listWord = list.get(i); 
      writer.write(listWord); 
      writer.write("\n"); 
     } 
     System.out.println("completed"); 
     writer.close();  
    } 
} 

現在,當我編譯它時,我收到了這條消息。

java.io.FileNotFoundException: A.txt (No such file or directory) 
at java.io.FileInputStream.open(Native Method) 
at java.io.FileInputStream.<init>(FileInputStream.java:120) 
at java.io.FileInputStream.<init>(FileInputStream.java:79) 
at java.io.FileReader.<init>(FileReader.java:41) 
at CombineTwoFile.main(CombineTwoFile.java:15) 
completed 

我的蘋果電腦上使用Coderunner和我想也許寫文本文件爲「C:/Users/dell/Desktop/Test/input1.txt」可以解決這個問題,但是我是在不確定如何編寫對應於我的硬盤驅動器。謝謝你看看,我感謝任何幫助。

+0

您需要文件的完整路徑。 '新的FileReader(「A.txt」)'會嘗試從你的類路徑中讀取文件。 –

+0

文件「A.txt」要麼不存在,要麼位於錯誤的地方。您可以通過記錄以下值來找到放置文件的位置:'new File(「A.txt」)。getCanonicalPath()'。 –

+0

只需將A.txt文件添加到一個目錄並在新的FileReader(「A.txt」)中,而不是僅傳遞「A.txt」,將A.txt文件的完整路徑作爲參數傳遞。例如,如果將文件A.txt放在C驅動器的臨時文件夾中。您將傳遞參數C:\\ temp \\ A.txt。 – HaroldSer

回答

0

您的Java程序無法在所需的位置找到'A.txt',要知道在哪裏放置文件,您可以使用system.getproperty(user.dir)來知道系統正在查找文件的位置。另一種方法是你可以寫絕對路徑new File('c:\\something\\A.txt');

希望它有助於

+0

現在我正在上課,我的教授說不要包含絕對路徑,因爲她只會將所有文件放到一個文件夾中並對其進行測試。其他可能的解決方案?或者是否有一個簡單的解決方案,「將txt文件放置在所需的位置?」不太確定它在哪裏看。我也嘗試使用System.out.println(system.getproperty(user.dir))打開我的編碼應用程序 –

+0

中的txt文件;看到工作目錄,實際上將文本文件放在與java文件相同的位置,並且文件地址將類似於「system.getproperty(user.dir)」+「A.txt」。希望你得到它 – 100rabh

+0

你也可以使用「System.out.println(new File(」A.txt「)。getCanonicalPath());」查看放置文件的位置,但上面的方法更適合於分配。 – 100rabh

0

盧卡斯,你的程序是絕對正確的。您不需要更正任何內容,只需手動創建一個文件「A.txt」,然後再次運行此代碼。

2

這裏有幾件事情可以改進。

首先,正如其他人指出的那樣,您需要指定文件的正確路徑,您的操作方式假定文件位於類路徑中,而顯然它們不是。

您既可以指定絕對路徑,也可以指定相對於類的相對路徑。

如果你想保留它,你需要把文件放在classpath(你的類運行的地方)。

看到這個附加信息上absoluterelative path

http://www.xyzws.com/javafaq/what-is-the-difference-between-absolute-relative-and-canonical-path-of-file-or-directory/60

除此之外,你不應該從main拋出一個異常,相反,你應該處理它。

我還建議你使用新的try-with-resources

例子:

try(BufferedReader bf = new BufferedReader(new FileReader("C:\\Users\\...\\A.txt"));){ 

    //do something 

} catch(IOException e){ 

    //handle 

} 

//no need to close the streams, the jgc will handle that for you 

當你使用他們所做的,try塊內這將關閉你的流。

如果您的老師(如您在一個評論中添加的內容)希望您能夠動態選擇路徑,則需要從控制檯輸入路徑並將其用作絕對路徑。

Scanner s = new Scanner(System.in); 
String path = s.readLine(); //use this as absolute path 

如果您需要從GUI做到這一點,你會需要一個JFileChooser

就寫作而言,適用相同的建議。

您還可以通過使用PrintWriter避免寫入行+'\ n'。 它將提供一個println(String s)方法,自動刷新,並且由於可移植性原因更好。

作爲輕微注意到,在這種情況下,你實際上並不需要s2,再次使用s1會做就好了。

+0

沒問題。我編輯並添加了一些更多建議,包括使用PrintWriter。 – Athamas

0

只需將

System.out.println(new File("A.txt").getCanonicalPath());

BufferedReader br = new BufferedReader(new FileReader("A.txt")); 

BufferedReader r = new BufferedReader(new FileReader("B.txt")); 

你會喜歡的異常信息之前得到確切的路徑:

C:\Users\PiyushMittal\Downloads\Java-mongodb-hello-world-example\mongodb\A.txt 
java.io.FileNotFoundException: A.txt (The system cannot find the file specified) 
completed at java.io.FileInputStream.open0(Native Method) 
    at java.io.FileInputStream.open(FileInputStream.java:195) 
    at java.io.FileInputStream.<init>(FileInputStream.java:138) 
    at java.io.FileInputStream.<init>(FileInputStream.java:93) 
    at java.io.FileReader.<init>(FileReader.java:58) 
    at com.mkyong.core.CombineTwoFile.main(CombineTwoFile.java:19) 

和第一行是地方你必須把文件:)