JavaファイルのI / Oの問題:今newBufferedWriterによって書かれたファイル

マイケル・メイ:

私は、ファイルに指定したディレクトリの下にあるすべてのディレクトリとファイル名を印刷するための小さなツールを書きました。プログラムは、罰金をコンパイルしますが、プログラムを実行した後、ファイルが書かれていません。これは私には奇妙に見えます。プログラムコードを以下に示します。

私は唯一のメソッドに引数としてファイルを使用する場合、コードの行49で、そこには問題はなかったと出力ファイルが書かれていました。試してみると、結果を参照してください。私は、引数としてfile.getFileName()を使用した場合でも、出力ファイルは全く書かれていませんでした!

手伝ってくれてありがとうございます。

/**
 * This program walks a directory tree
 * and prints out the directory name and the file names under it.
 * @author Michael Mei
 * @version 1.0 22-03-2020
 */

package walkDirectory;

import java.io.*;
import java.nio.file.*;
import java.nio.file.attribute.*;
import static java.nio.file.FileVisitResult.*;
import static java.nio.file.FileVisitOption.*;
import java.nio.charset.StandardCharsets;
import java.util.*;

public class DirWalkerPrinter extends SimpleFileVisitor<Path> {
    private Path outPath;
    private Writer out;
    private int fileCount;
    private int dirCount;

    DirWalkerPrinter (Path outPath) throws IOException {
        this.outPath = outPath;
        out = Files.newBufferedWriter(outPath, StandardCharsets.UTF_16, StandardOpenOption.WRITE);
    }

    public int getFileCount () {
        return fileCount;
    }

    public int getDirCount () {
        return dirCount;
    } 

    public void writeResults(Path p) throws IOException {
        // Using System.out.println(p.toString()) was also working.
        out.write(p.toString());
        out.write("\n");
    }

    public void done () throws IOException {
        out.write(fileCount + " of files found in " + dirCount);
    }

    @Override
    public FileVisitResult visitFile (Path file, BasicFileAttributes attrs) throws IOException {
        writeResults(file.getFileName()); // line 49
        fileCount++;
        return CONTINUE;
    }

    public FileVisitResult postVisitDirectory (Path dir, BasicFileAttributes attrs) throws IOException {
        writeResults(dir);
        dirCount++;
        return CONTINUE;
    }
    @Override
    public FileVisitResult visitFileFailed (Path file, IOException e) {
        System.err.println(e);
        return CONTINUE;
    }

    public static void main(String[] args) throws IOException {
        if (args.length < 2) {
        System.err.println("java DirWalkerPrinter source-path destination-file");
        System.exit(-1);
    }
        Path startingDir = Paths.get(args[0]);
        Path writeToDir = Paths.get(args[1]);
        DirWalkerPrinter dirWalkerPrinter = new DirWalkerPrinter(writeToDir);
        Files.walkFileTree(startingDir, dirWalkerPrinter);
        dirWalkerPrinter.done();
        int fileCount = dirWalkerPrinter.getFileCount();
        int dirCount = dirWalkerPrinter.getDirCount();
        System.out.println(fileCount + " of files found in " + dirCount);
    }
}
RR_IL:
file.getFileName()

この関数は、ファイル名のみを返します - 完全なパスなし。あなたのコードは、あなたがから実行しているのと同じディレクトリにファイルを作成しようとします。(あなたのための入力ファイル名のみ)

これはおそらく、あなたの問題です。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=345189&siteId=1