私のコードに次のようなものがある場合:
String line = r.readLine(); //Where r is a bufferedReader
次の行がファイルの最後にある場合、どうすればクラッシュを回避できますか? (つまり、null)
次の行を読む必要があります。対処する必要があるものがあるかもしれませんが、コードがなければクラッシュするだけです。
そこに何かがあれば、すべては大丈夫ですが、そこに何かがあることを保証することはできません。
だから次のようなことをしたら:(疑似コード):
if (r.readLine is null)
//End code
else {check line again and excecute code depending on what the next line is}
このような問題は、nullに対して行をチェックすると、すでに次の行に移動しているので、再度確認するにはどうすればよいかということです。
私はこれを行う方法を考え出していない-提案は大いに役立つだろう。
Am ...このような構造を単純に使用できます。
String line;
while ((line = r.readLine()) != null) {
// do your stuff...
}
以下を使用して、ファイルの終わりを確認できます。
public bool isEOF(BufferedReader br)
{
boolean result;
try
{
result = br.ready();
}
catch (IOException e)
{
System.err.println(e);
}
return result;
}
すべての行をループする場合は、次を使用します。
while((line=br.readLine())!=null){
System.out.println(line);
}
br.close();
あなたの場合、そこに何かがあるかもしれないので、次の行を読むことができます。何もなければ、コードはクラッシュしません。
String line = r.readLine();
while(line!=null){
System.out.println(line);
line = r.readLine();
}
そもそも、「Functional Programming Approach」を使用してみませんか?とにかく、新しいメソッドlines()がJava 1.8以降に追加されました。BufferedReaderはStreamとしてコンテンツを返します。 。ファイルからすべての行をストリームとして取得し、ロジックに基づいて文字列をソートし、リスト/セットで同じものを収集して出力ファイルに書き込むことができます。同じアプローチを使用する場合、NullPointerExceptionについて心配する必要はありません。以下は同じためのコードスニペットです:-
import Java.io.IOException;
import Java.io.PrintWriter;
import Java.nio.file.Files;
import Java.nio.file.Paths;
import Java.util.stream.Collectors;
public class LineOperation {
public static void main(String[] args) throws IOException {
Files.newBufferedReader(Paths.get("C://xyz.txt")).
lines().
collect(Collectors.toSet()). // You can also use list or any other Collection
forEach(System.out::println);
}
}