2016-10-10 7 views
1

私は2つのテキストファイルを結合するように私のJavaクラスの割り当てを持っています。2つのテキストファイルを結合する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();  
    } 
} 

コンパイルすると、このメッセージが表示されます。

私はAppleコンピュータ上でCoderunnerを使用していますが、私はおそらくのようなテキストファイルを書き込むと思っ
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 

「C:/Users/dell/Desktop/Test/input1.txtは、」問題を解決することが、しかし、私はわかりませんよそれを私のハードドライブに対応させる方法。見ていただきありがとうございますと私はすべての助けを感謝します。

+0

ファイルへのフルパスが必要です。 'new 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

今はクラスに入っていて、教授はすべてのファイルを1つのフォルダに入れてテストするだけなので、絶対パスに含めないように言いました。その他の解決策はありますか?または、「txtファイルを目的の場所に配置する」という簡単な解決策がありますか?それがどこを見ているかわからない。私もコーディングアプリケーション内でtxtファイルを開こうとしました –

+0

System.out.println(system.getproperty(user.dir));実際の作業ディレクトリを見るにはjavaファイルと同じ場所にテキストファイルを置き、ファイルアドレスは "system.getproperty(user.dir)" + "A.txt"のようになります。 – 100rabh

+0

"System.out.println(新しいファイル(" 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)メソッドを提供し、自動フラッシュします。移植性の理由から、より優れています。 マイナー注意点としては

、この場合には、あなたが実際に再びs1を使用するとうまくやるだろう、s2を必要としません。

+0

問題ありません。私は編集し、PrintWriterの使用を含むいくつかの提案を追加しました。 – Athamas

0

だけ例外などの情報前に正確なパスを取得します

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

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

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

を置く:

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) 

と非常に最初の行がどこの場所でありますあなたはファイルを置く必要があります:)

関連する問題