2016-11-17 17 views
2

Javaでは、入力ファイル全体をの1つのファイルに変換するにはどうすればよいでしょうか。String?言い換えれば入力ファイル全体を文字列に変換するにはどうすればよいですか?

私は、入力ファイル"test.in"持っている場合は、:

c++ 
java 
python 
test 

を、私は"c++javapythontest"を含むStringを作成したいです。

私は

Scanner input = new Scanner(new File("test.in")); 
while(input.hasNext()){ 
    String test = test + input.nextLine(); 
} 

の線に沿って何かを考えたが、それは動作するようには思えません。
効率的な方法はありますか?

+2

そのループの最初の反復について考えを使用するJava8に追加されています。 'test'は定義されていないので、そこに何を追加するのですか? –

+0

改行をすべて破棄したいのですか? – Bohemian

+0

'FileInputStream fis =新しいFileInputStream(" test.in "); byte [] byteArray =新しいバイト[fis.availble()]; fis.read(byteArray、0、byteArray.length);文字列str =新しい文字列(byteArray); ' –

答えて

4

改行文字を破棄し、ファイルの内容を読み取るために:

String contents = Files.lines(Paths.get("test.in")).collect(Collectors.joining()); 

私はあなたがhasNextLine()のためにテストするために必要と思うし、あなたがそのような文字列を連結するとき、あなたのコードのパフォーマンスは非常に多くのオブジェクトの作成に苦しみます。 StringBuilderを使用するようにコードを変更した場合は、はるかに高速に実行されます。

1

これを行う方法はたくさんあります。試してみる方法の1つは、nioパッケージクラスを使用することです。 java.nio.file.FilesクラスのreadAllBytesメソッドを使用して最初にbyte arrayを取得し、バイト配列new String(bytes)から新しいStringオブジェクトを作成することができます。

この方法のJava Docを読んでください。

byte[] bytes= Files.readAllBytes(Paths.get(filePath)); 
String fileContent = new String(bytes); 
0

は、それを埋める反復、ループの外に文字列のテストを宣言します。以下の

サンプルプログラムです。

0

このコードは、元のロジックを少し変更したものです。
StringBuilderは、文字の変更可能なシーケンスを作成します。これは、毎回新しいオブジェクトを作成するのではなく、StringBuilderオブジェクトの値にコンテンツを追加することを意味します。

String test = test + input.nextLine();whileループ内にありました。
したがって、whileループの繰り返しごとにStringテストの新しいオブジェクトが作成されたため、以前の値は保存されませんでした。

String path = "test.txt"; 
Scanner input = new Scanner(new File(path)); 
StringBuilder sb = new StringBuilder(); 

while (input.hasNext()) { 
    sb.append(input.nextLine() + "\n"); 
} 
System.out.println(sb.toString()); 
0

あなたは代わりに、これを試すことができます。
そのシンプルな1つのライナー

String str = new String(Files.readAllBytes(Paths.get("/path/to/file")));

これは、ファイル全体を読み込み、それを文字列として保持します。
改行文字を削除する場合。

str.replace("\n", "");

0

String.joinStringBuilder内部

String content = String.join("", Files.readAllLines(Paths.get("test.in"))); 
関連する問題