是否有一种简单的方法可以查看特定文件是否具有DOS / MAC / UNIX行结尾?
目前我逐字节读取文件,如果看到Windows回车,则停止
for (byte thisByte : bytes) {
if ((!isDos) && (thisByte == 13)) {
isDos = true;
}
...
有没有办法在不逐字节读取文件的情况下获取相同的信息?
答案 0 :(得分:3)
可能的优化可能只是查看文件的最后一个或两个字节。由于许多文本文件终止于一行,因此大部分时间都可以使用。如果你没有发现一条在那里结束的行,那么你将不得不逐字逐句地回归。
BTW,您的示例代码将isDos设置为true,而不检查下一个字符是否为十进制数10.如果它不是10那么它可能是MAC文件格式。
答案 1 :(得分:1)
假设它是一个文本文件,并且这些行的长度是“合理的”,你可以读取该文件的一个大块(比如说4096字节)并只扫描该块的CR字符。
但是否则,不,你在文件中找到一个字符的唯一方法就是实际读取整个文件并查找字符。
假设您提出这个问题,因为您在每次读取文件时遇到性能问题:确保将FileInputStream
包裹在BufferedInputStream
。
答案 2 :(得分:0)
如果您知道某个文件只使用一种行尾,那么您只需扫描第一个换行符,看看它是否是DOS / UNIX / Mac。