gpt4 book ai didi

java - 在两点之间读取文件

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:10:27 25 4
gpt4 key购买 nike

我有以下文件:

文件.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);

我相信可以计算出我想要的两个偏移量。非常感谢社区的任何建议。

最佳答案

比我在评论中假设的更好,我们应该简单地使用 RandomAccessFile 类!

// Load in the data file in read-only mode:
RandomAccessFile randFile = new RandomAccessFile("inputFileName.txt", "r");

// (On your own): Calculate starting byte to read from
// (On your own): Calculate ending byte to read from

// Discard header and footer.
randFile.setLength(endingPoint);
randFile.seek(startingPoint);

// Discard newlines of any kind as they are read in.
StringBuilder sb = new StringBuilder(endingPoint - startingPoint);
String currentLine = "";
while(currentLine != null)
{
sb.append(currentLine);
currentLine = randFile.readLine();
}

// hash your String contained in your StringBuilder without worrying about
// header, footer or newlines of any kind.

请注意,此代码不是生产质量的,因为它不会捕获异常并且可能有一些差一错误。我强烈建议阅读有关 RandomAccessFile 类的文档:http://docs.oracle.com/javase/1.4.2/docs/api/java/io/RandomAccessFile.html#readLine ()

希望对您有所帮助。如果我跑题了,请告诉我,我会再试一次。

关于java - 在两点之间读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14362899/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com