提问人:SymbolKina 提问时间:9/13/2023 更新时间:9/13/2023 访问量:42
Java-检查文件是否仅包含空字符的最佳方法
Java-best way to check if file contains only null characters
问:
我遇到了一个问题,我无法解决它。 我有一个文件,可以从 2 个应用程序进行读取和写入。当设备意外关闭时,文件的内容将保持相同的大小,但每个字符都替换为 Null 字符。 现在我需要一种方法来检查内容文件是否为 null。 最好的性能方法是什么? 谢谢
答:
-1赞
Leonidas Sokoridas
9/13/2023
#1
要在 Java 中执行检查文件是否仅包含空字符,您可以以字节块为单位读取文件,并验证每个块中的所有字节是否为零。以下是您可以使用以下方法:BufferedInputStream
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
public class Main {
public static void main(String[] args) {
try {
System.out.println(isFileNull("path/to/your/file.txt"));
} catch (IOException e) {
e.printStackTrace();
}
}
public static boolean isFileNull(String filepath) throws IOException {
try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(filepath))) {
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = bis.read(buffer)) != -1) {
for (int i = 0; i < bytesRead; i++) {
if (buffer[i] != 0) {
return false;
}
}
}
}
return true;
}
}
解释:
- 我们习惯于以块的形式读取文件。
BufferedInputStream
- 在该方法中,我们使用该方法将文件的块读取到字节数组缓冲区中,该方法返回读取的字节数,如果到达流的末尾,则返回 -1。
isFileNull
read
- 然后,我们遍历缓冲区中的每个字节,并使用简单的比较 () 检查它们中是否有任何一个不为零。如果我们发现任何非零字节,我们会立即返回。
buffer[i] != 0
false
- 如果我们到达文件末尾而没有找到任何非零字节,则返回 .
true
- 请注意,我们使用 try-with-resources 语句来确保正确关闭,即使抛出异常也是如此。
BufferedInputStream
评论
2赞
rzwitserloot
9/13/2023
此代码非常复杂。关键是你可以有效地调用(如返回单个字节的 no-args 那个)。您是双缓冲:您已将其包装在 BIS 中,并使用 .您只需要其中之一。解决这个问题,再加上教坏习惯的小细节,这个反对票可以变成赞成票。BufferedInputStream
read()
byte[] buffer = new byte[1024];
1赞
rzwitserloot
9/13/2023
坏习惯是.这是有毒的坏事,需要将其消除。这里的简单解决方法是,可以而且几乎总是应该声明为 .在这里也这样做。更少的代码,更好的代码,更轻松的调试。三赢。e.printStackTrace();
main
throws Exception
0赞
SymbolKina
9/14/2023
谢谢,我会尝试这个解决方案,然后让你知道
评论