gpt4 book ai didi

java - 使用在循环中声明的文件 IO

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:54:55 26 4
gpt4 key购买 nike

编辑:

工作代码:

    Scanner input = new Scanner(System.in);
String inputFile = "Computer_Store_DSV.txt";
String userInputFile;

File sourceFile;
do {
System.out.println("Please enter the path of the file, enter to use the default path");
userInputFile = input.nextLine();
if (!"".equals(userInputFile)) {
inputFile = userInputFile;
}
sourceFile = new File(inputFile);

System.out.println("Path is = " + inputFile);

if (!sourceFile.canRead()) {
System.out.println("Unable to read the file");
}
} while (!sourceFile.canRead());
Scanner record = new Scanner(sourceFile);

感谢呼吸的帮助。

我有以下代码:

Scanner input = new Scanner(System.in);
boolean fileLoop = false;
String inputFile = "Computer_Store_DSV.txt";
String userInputFile;

do {
System.out.println("Please enter the path of the file, enter to use the default path");
userInputFile = input.nextLine();
if (!"".equals(userInputFile)) {
inputFile = userInputFile;
}
File sourceFile = new File(inputFile);
System.out.println("Path is = " + inputFile);

if (!sourceFile.canRead()) {
System.out.println("Unable to read the file");
fileLoop = true;
}
while (fileLoop);
Scanner record = new Scanner(sourceFile);

如您所见,我正在尝试在启动邮件程序之前“验证”文件是否存在。

有没有一种方法可以在不使用 File 类两次“验证和实际程序”的情况下做到这一点?

最佳答案

请看看这个解决方案。我相信它可以实现您想实现的目标。我重组了代码并使用了 2 个额外的方法。最后我将关闭输入,因为如果它保持打开状态,您可能会造成内存泄漏。

我已经测试了任何文件位置的代码,它可以毫无问题地检索它。您可以从项目内或计算机的任何位置检索文件。您唯一需要提供的是路径(没有文件名),因为只要您始终使用同一个文件,您就可以利用 String 的 concat() 方法。

假设该文件位于目录/foo/fooBar/Examples/Computer_Store_DSV.txt 中。如果您想访问该文件,您应该编写 foo/fooBar/Examples/(注意最后一个斜线: *您必须提供它* )。另一个例子:如果文件位于项目的根文件夹内,按回车键它将找到正确的路径。如果它在您的项目中名为 resources 的文件夹中,那么您只需编写 resources/它就会找到该文件。

如果找到文件,它会通知您文件已找到,它使 fileLoop 为假并创建一个名为 record 的 Scanner。

您会看到这些方法被声明为静态的。它们是这样的,因为我在 main 中使用它们,它们必须是静态的。如果您的代码不在主类中,那么您可以从方法中删除静态。

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class TestScanner {
public static void main(String args[]) throws FileNotFoundException {
Scanner input = new Scanner(System.in);
boolean fileLoop = true;
String inputFile = "Computer_Store_DSV.txt";
String userInputFile;
File sourceFile = null;
Scanner record = null;
do {
System.out.println("Please enter the path of the file, or press enter to use the default path");
userInputFile = input.nextLine();

if (!userInputFile.isEmpty() && new File(userInputFile.concat(inputFile)).exists() ) {
inputFile=userInputFile.concat(inputFile);
printState(inputFile,"File found.!");
sourceFile = new File(inputFile).getAbsoluteFile();
fileLoop=readFile(sourceFile);
record = new Scanner(sourceFile);
}
else if (new File(inputFile).getAbsoluteFile().exists()){
sourceFile = new File(inputFile).getAbsoluteFile();
printState(inputFile,"File found.!");
fileLoop=readFile(sourceFile);
record = new Scanner(sourceFile);
}
else{
fileLoop=true;
printState(inputFile,"File does not exist.!");
}
} while (fileLoop);
input.close();

}

public static boolean readFile(File sourceFile){
if (!sourceFile.canRead()) {
System.out.println("Unable to read the file");
return true;
}
else
return false;
}

public static void printState(String inputFile,String state){
System.out.println(state);
System.out.println("Path used: " + new File(inputFile).getAbsolutePath()+"\n");
}
}

您还可以通过传递以下内容来避免创建源文件

new File(inputFile).getAbsoluteFile()

像这样直接给Scanner

record = new Scanner(new File(inputFile).getAbsoluteFile()).

关于java - 使用在循环中声明的文件 IO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13496135/

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