-1

程序必须打印我要求它读取的文件中的文本。问题是我将其编码为从特定文件中读取文本

 File file = new File("numbersonnumbers.txt");
 Scanner inputFile = new Scanner(file);

如何让程序从用户输入指定的文件中读取文本?*该文件将与程序位于同一目录/文件夹中,因此这不是问题。

编辑:我之前对用户输入的尝试

Scanner keyboard = new Scanner(System.in);
String filename = keyboard.nextLine();
File file = new File(filename);
Scanner inputFile = new Scanner(file);
4

5 回答 5

2

声明一个String变量,例如someUserFile,接受用户输入。然后...

File file = new File(someUserFile);
Scanner inputFile = new Scanner(file);

您可能想要检查他们的输入并附".txt"加到他们输入的末尾。

如果这有效:

File file = new File("numbersonnumbers.txt");
Scanner inputFile = new Scanner(file);

然后这个:

Scanner keyboard = new Scanner(System.in);
String filename = keyboard.nextLine();
File file = new File(filename);
Scanner inputFile = new Scanner(file);

假设您键入numbersonnumbers.txt并准确键入,将执行完全相同的操作。

假设您键入numbersonnumbers.txt准确,第二个代码段与第一个代码段执行完全相同的操作。

于 2013-10-28T02:51:02.103 回答
1

首先,您应该要求用户输入文件名。然后只需将代码中的“numbersonnumbers.txt”替换为您为用户输入设置的变量。

Scanner in = new Scanner(System.in);
System.out.println("What is the filename?");
String input = in.nextLine();
File file = new File(input);
于 2013-10-28T02:51:47.363 回答
0
Scanner input = new Scanner(System.in);
String fileName = input.nextLine();
File file = new File(fileName);
Scanner inputFile = new Scanner(file);
于 2013-10-28T02:51:46.293 回答
0

1)程序必须打印文件中的文本:

  • 让我们调用这个文件,dataFile.textdataFile.dat(任何一种方式都有效)

  • 假设客户端将输入任何文件,我们必须获取文件名......

    这些 Java 语句可以解决问题:

    // 创建一个扫描器来读取用户的文件名

  • 扫描仪用户输入 = 新扫描仪(System.in);

    // 向客户端请求文件名

  • System.out.println("请输入输入文件名:");

    // 获取客户端文件名

  • 字符串文件名 = scanFile.nextLine();

    // scanFile,扫描新的File fileName(客户端的文件),位于src目录下。“src/”代表文件(客户端文件)的路径。

  • 扫描仪 scanFile = new Scanner(new File("src/" + fileName));

    • 由于问题表明文件“将与程序位于同一目录中”,因此这不是问题。

-------------------------------------------------- -------------------------------------------

2)问题是我将其编码为从特定文件中读取文本

  • 是的,您所做的只是创建自己的名为“numbersonnumbers.txt”的文件,这正是您在解决此问题时应该遵循的代码,但您将使用而不是键入“numbersonnumbers.text”客户端的输入文件,也就是前面代码中的String变量“fileName”...*

    文件 file = new File("numbersonnumbers.txt");

    扫描仪输入文件 = 新扫描仪(文件);

更正:文件 file = new File("src/" + fileName);

扫描仪输入文件 = 新扫描仪(文件);// 将扫描所有文件的数据

更正了更多:Scanner inputFile = new Scanner(new File("src/" + fileName));

-------------------------------------------------- -------------------------------------------

3)程序必须打印文件中的文本

  • 现在要将文件中的数据项打印到控制台,您只需将文件中的每个项复制到数组、列表或树中,具体取决于实现规范,但这显然是初学者编程,所以不要介意列表和树,使用数组。

所以你已经完成了 #1 中的 Scanner scanFile 或 #2 中的 Scanner inputFile

现在,创建一个数组,显然数组的类型将基于文件中数据项的类型......字符串用于(例如,月份名称)或 int 用于(例如,ID 号......等)

假设文件中的数据项是月份的名称(jan、feb、march),我们将创建一个 String 类型的数组。

字符串[] 文件数据 = 新字符串 [100]; // 具有随机长度 (100)

// 现在我们将把文件中的每个项目复制到数组中,您需要占位符值来跟踪文件项目的遍历(在每个项目处停止)期间的位置。

诠释 i = 0; // 初始化遍历的开始(文件项的索引 0)

while (scanFile.hasNextLine()) { // 当文件在下一行有输入时,从文件中读取。

    fileData[++i] = scanFile.nextLine(); // Input file data and increment i

    System.out.println(fileData[i]); // Prints all of the file's data items

    } // end while

尊敬的,-!di0m

于 2017-05-08T23:14:21.193 回答
0

您已经在代码中获得了几乎所有需要的东西。你只需要正确地重新安排你的代码行,并添加更多。

您需要两个步骤:扫描用户输入的完整文件路径,然后扫描实际文件数据,如下所示:

// Scanner Object to be used for the user file path input
Scanner keyboard = new Scanner(System.in);

// Asks the user to enter the full path of their file
System.out.print("Enter your full file path: ");

// Stores the user input file path as a string
String filename = keyboard.nextLine();

// Creates a File object for the file path, and scans it
Scanner inputFile = new Scanner(new File(filename);    

现在您可以阅读扫描的文件inputFile。例如,您可以使用while循环一次读取一行来读取所有数据并将其打印出来,如下所示:

// Reads one line at a time, and prints it out
while(inputFile.hasNext) {
    System.out.println(inputFile.nextLine());

或者您可以将每一行的原始数据(修剪和拆分)放入一个数组中,并将每一行打印为一个数组,如下所示:

// Declares a String array[] to be used for each line
String[] rawData;    

// Reads one line at a time, trims and split the raw data,
// and fills up the array with raw data elements, then prints 
// out the array. it repeats the same thing for each line.
while (scanner2.hasNext()) {
    rawData = scanner2.nextLine().trim().split("\\s+");
    System.out.println(Arrays.toString(rawData));
}
于 2019-04-30T14:21:07.077 回答