如何将文件路径写入txt文件?

huangapple go评论78阅读模式
英文:

How to write file path into txt.file?

问题

public class FileScanner {
    public void scanFolder() throws IOException, InterruptedException {
        Scanner input = new Scanner(System.in);

        // Creating log file
        File log = new File("C:/Users/mateu/OneDrive/Pulpit/log.txt");
        if (!log.exists()) {
            log.createNewFile();
        }

        // Object for writing file names and paths to the log
        PrintWriter printIntoLog = new PrintWriter(log);

        while (true) {
            // Providing path of the file to search for
            System.out.println("Input file's directory you are looking for: ");
            String path = input.nextLine();

            // Creating object for the given file
            File searchedFile = new File(path);

            // Checking if the file exists - if yes, writing its path to the log and deleting it
            try {
                if (searchedFile.exists()) {
                    printIntoLog.println(searchedFile.getPath());
                    //searchedFile.delete();
                } else {
                    throw new MyFileNotFoundException("Searching stopped for 1 minute.");
                }
            } catch (MyFileNotFoundException ex) {
                System.out.println(ex);
                TimeUnit.MINUTES.sleep(1);
            }
        }
    }
}
英文:

I am writing simple program that is looking for file and if it exists, writes his path to txt file. If not, program is freezed for 1 minute. My problem is that file path is not being printed into txt file when searched file exists. I think it is something wrong with try block. I do not know where the problem is. How can i solve it?

public class FileScanner {
public void scanFolder() throws IOException, InterruptedException {
    Scanner input = new Scanner(System.in);

    //tworzenie pliku logu
    File log = new File("C:/Users/mateu/OneDrive/Pulpit/log.txt");
    if (!log.exists()) {
        log.createNewFile();
    }

    //obiekt zapisujacy nazwy i sciezki plikow do logu
    PrintWriter printIntoLog = new PrintWriter(log);


    while (true) {
        //podanie sciezki szukanego pliku
        System.out.println("Input file's directory you are looking for: ");
        String path = input.nextLine();
        //utworzenie obiektu do danego pliku
        File searchedFile = new File(path);

        //sprawdzenie czy plik istnieje- jesli tak to zapisuje do logu jego sciezke i usuwa go
        try{
            if (searchedFile.exists()) {
                printIntoLog.println(searchedFile.getPath());
                //searchedFile.delete();
            }else{
                throw new MyFileNotFoundException("Searching stopped for 1 minute.");
            }
        }catch(MyFileNotFoundException ex){
            System.out.println(ex);
            TimeUnit.MINUTES.sleep(1);
        }
    }
}

}

答案1

得分: 0

你应该在执行结束之前关闭 PrintWriter 引用。在对文件进行读写操作后关闭文件是一种强制性的实践。

如果你使用的是 Java +7,你可以使用 try-with-resources 语法来实现这一点:

try (PrintWriter printIntoLog = new PrintWriter(log)) {
   while (true) {
      ....
   }
}

对于旧版本的 Java,你可以使用 try-finally 语法:

try {
  while(true) {
     ...
  }
} finally {
   printIntoLog.close();
}

参考:

Java – Try with Resources

英文:

You should close the PrintWriter reference before finishing execution. It's an enforced practice to close a file after read/write on it.

If you are using Java +7 you can use the fancy way withtry-with-resources syntax

```java
try (PrintWriter printIntoLog = new PrintWriter(log)) {
   while (true) { 
      ....
   }
}
```

With older versions you can use try-finally syntax

try {
  while(true) {
     ...
  }
} finally {
   printIntoLog.close();
}

See

Java – Try with Resources

huangapple
  • 本文由 发表于 2020年4月7日 22:11:00
  • 转载请务必保留本文链接:https://go.coder-hub.com/61081998.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定