Java проблема ввода-вывода файла: файл теперь записывается newBufferedWriter - PullRequest
0 голосов
/ 22 марта 2020

Я написал небольшой инструмент для печати всех каталогов и имен файлов в данном каталоге в файл. Программа компилируется нормально, но после запуска программы файл не записывается. Это выглядит странно для меня. Код программы указан ниже.

В строке 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);
    }
}

1 Ответ

1 голос
/ 22 марта 2020
file.getFileName()

Эта функция будет возвращать только имя файла - без полного пути. Ваш код попытается создать файл в том же каталоге, из которого вы выполняете. (Поскольку вы вводите только имя файла)

Возможно, это ваша проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...