1

/proc/%d/statJava メソッド copyFiles() を使用してファイルを読み取る際に問題が発生しました(以下のソース コード)。同様の 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) {}
    }
4

3 に答える 3

2

その理由として最も可能性が高いのは、オペレーティング システムがファイル サイズをゼロと報告していることです。

私のマシンでは、次のようにman 2 stat言います:

"ディレクトリの下のほとんどのファイルでは、フィールドにファイル サイズが返されません。代わりに、フィールドは値 0 で返されます。/procstat()st_size "

(statシステム コールは、JVM がファイルのサイズを調べるために使用するものです。)

于 2011-08-16T12:43:04.830 に答える