私は次のファイルを持っています:
file.csv
header:2013/01/01, shasum: 495629218484151218892233214
content:data,a,s,d,f,g,h,j,k,l
content:data,q,w,e,r,t,y,u,i,o,p
content:data,z,x,c,v,b,n,m
footer:2013/01/01 EOF
コンテンツのハッシュを計算する必要があります。言い換えると、ヘッダーとフッターのないファイルコンテンツのハッシュを計算し、ソースからのヘッダーで提供されているものと一致することを確認する必要があります。scanner
ヘッダーとフッターを使用して、ファイルを1行ずつ読み取ってみました。
Scanner reader = new Scanner(new FileReader("filename"));
String header = reader.nextLine();
while(reader.hasNextLine()){
line = reader.nextLine();
if(reader.hasNextLine()){
md.update(line.getBytes());
md.update(NEW_LINE.getBytes());
}
}
ここでは、ファイルがどこから来ているのかわかりません。WindowsまたはUnixから来ている可能性があります。では、どうすれば何NEW_LINE
を使うべきかを知ることができます。そのために私はこの汚いハックを書きました。
int i;
while((i = br.read()) != -1){
if(i == '\r'){
if(br.read() == '\n'){
NEW_LINE = "\r\n";
break;
}
} else if(i == '\n'){
NEW_LINE = "\n";
break;
}
}
\r\n
基本的に、またはの最初のシーケンスを探しています\n
。最初に遭遇するものは何でも、それは改行文字であると想定します。
私のファイルがCRLFとLFの両方の混合である場合、これは間違いなく私を困らせるでしょう。2つのオフセットを提供できるリーダーの恩恵を受ける可能性があり、それらの2つのオフセット間のコンテンツが返されます。そのようです:
reader.read(15569, 236952265);
私が望む2つのオフセットは計算できると思います。コミュニティからの提案は大歓迎です。