2016-05-06 4 views
0

BufferedReader.readLine()は自動的にEOL文字を削除します。単にreadLine()を実行して、最後に "\ r"を付けることはできません。私は文字が2バイトであるがint値は4バイトであるため、「私はチャーCH =(チャー)」バイトのデータを失うテキストファイルからaを読み取るときにEOL文字を維持するにはどうすればよいですか?

InputStream myFile = new FileInputStream("C:\\test.txt"); 
StringBuilder sb = new StringBuilder(); 

int i; 

while((i = myFile.read()) != -1) 
{ 
    char ch = (char) i; 
    sb.append(ch); 
} 

System.out.println(sb); 

しかし試みました。私は繰り返し

この汎用コードが読み取られますいくつかのファイルがCRが含まれますし、他はないので、私は

sb.append(ch+"\r"); 

ような何かを行うことはできません。

java.nio。*より、Files.readAllBytes(パスパス)はオプションのようです。しかし、私はそれに精通しておらず、Javadocに基づいてEOL文字を返すかどうかは分かりません。

+0

テキストファイルを文字列に読み込もうとしているようです。もしそうならhttp://stackoverflow.com/questions/3402735/what-is-simplest-way-to-read-a-file-into-string – cyroxis

+2

があるなら 'readLine()'を使うべき理由があります実際には線で区切られたコンテンツには興味がありませんか? 012.Checker.get( "C:\\ test.txt"))。forEach(System.out :: println); – zapl

+1

。またはString content = new String(Files.readAllBytes(Paths.get( "C:\\ test.txt")))); – Hector

答えて

3

理想的にはバイトに触れないでください。例えば。

public static String fromFile(File file, Charset charset) throws IOException { 
    try (BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), charset))) { 
     StringWriter out = new StringWriter(); 
     char[] cbuf = new char[8192]; 
     int read; 
     while ((read = reader.read(cbuf)) != -1) { 
      out.write(cbuf, 0, read); 
     } 
     return out.toString(); 
    } 
} 

すべてをそのままStringに変換します。 bytecharに変換することは本当に危険であり、あなたがそれがasciiだけであることがわからない限り、あなた自身で行うべきではありません。組み込みのcharsetsを使用しましょう。すでに適切なものを使用するのは難しいです。

Files.readAllBytes() EOL文字はバイトで動作し、そのバイトの意味を解釈しようとしません。

public static String fromPath(Path path, Charset charset) throws IOException { 
    byte[] bytes = Files.readAllBytes(path); 
    return new String(bytes, 0, bytes.length, charset); 
} 

は、nioメソッドを使用して同等です。 new File("myfile.txt")の代わりにPaths.get("myfile.txt")で電話してください。

+0

.toString()ストリップEOL文字をオフにしますか? –

+0

@ j.seashell no - すべての改行はまだ存在していますが、 'readline()'メソッドだけがそれを行います。回答済みとマークされた – zapl

+0

。ありがとう@zapl –

関連する問題