我有以下文件:
文件.csv
基本上,它正在寻找第一个序列要么是
如果我的文件同时包含CRLF和LF,这肯定会给我带来麻烦。我可能会从读取器中受益,向其提供两个偏移量,它会将两个偏移量之间的内容返回给我。像这样:
文件.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
逐行读取文件并去除文件头和尾。
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
呢?为此,我写了这个“肮脏的Hack”。
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,这肯定会给我带来麻烦。我可能会从读取器中受益,向其提供两个偏移量,它会将两个偏移量之间的内容返回给我。像这样:
reader.read(15569, 236952265);
我相信我想要的两个偏移量是可以计算出来的。非常感谢社区的任何建议。