gpt4 book ai didi

java - 为什么我不能使用 Commons IO FileUtils 在 Java 中读取/proc,但可以使用普通的 FileInputStream 读取?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:28:44 26 4
gpt4 key购买 nike

我在使用我的 Java 方法 copyFiles()(下面的源代码)读取 /proc/%d/stat 文件时遇到了问题。我找到了使用类似 readProc() 方法的解决方法。

现在我想知道问题出在哪里。输出文件已创建,但每个文件都有 0 字节(在/proc/中所有文件都是 0 字节,因为它不是标准文件系统)。 FileUtils 来自 Apache Commons IO 库。

我尝试使用 java.nio 执行相同的操作 - 再次抛出 IOException,指出每个文件的属性都是错误的。

我删除了一些关于解析异常等的代码

为什么这对 FileInputStream 有效,但对 FileUtils.copyFile() 无效?

public void copyFiles() {
final File dir = new File("/proc");
final String[] filedirArray = dir.list();
long counter = 0;
for(String filedir : filedirArray) {
final File checkFile = new File(dir, filedir);
if (checkFile.isDirectory()) {
try {
Integer.parseInt(filedir);
File srcFile = new File(checkFile, "stat");
File dstFile = new File("/home/waldekm/files/stat" + "." + Long.toString(counter++));
try {
FileUtils.copyFile(srcFile, dstFile);
} catch (IOException e1) {}
} catch (NumberFormatException e) {
// not a number, do nothing
}
}
}
}

public static void readProc(final String src, final String dst) {
FileInputStream in = null;
FileOutputStream out = null;

File srcFile = new File(src);
File dstFile = new File(dst);

try {
in = new FileInputStream(srcFile);
out = new FileOutputStream(dstFile);
int c;
while((c = in.read()) != -1) {
out.write(c);
}
} catch (IOException e1) {
} finally {

try {
if (in != null) {
in.close();
}
} catch (IOException e1) {}
try {
if (out != null) {
out.close();
}
} catch (IOException e1) {}
}

最佳答案

原因很可能是操作系统将文件大小报告为零。

在我的机器上,man 2 stat 是这样说的:

"For most files under the /proc directory, stat() does not return the file size in the st_size field; instead the field is returned with the value 0."

(stat 系统调用将是 JVM 用于查明文件大小的方法。)

关于java - 为什么我不能使用 Commons IO FileUtils 在 Java 中读取/proc,但可以使用普通的 FileInputStream 读取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7077985/

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