【问题标题】:Read file name from user input on linux terminal - JAVA从Linux终端上的用户输入读取文件名 - JAVA
【发布时间】:2016-07-28 12:45:50
【问题描述】:

我想在 JAVA 中编写一个小脚本,以便在 linux 终端中接收文件名并读取该文件。

这就是我正在尝试的:

import java.util.Scanner;
import java.io.*;

class ItauScript {
    public static void main(String[] args) {
        Scanner reader = new Scanner(System.in);
        System.out.println("Filename: ");
        String fileName = reader.next();

        FileReader fileReader = new FileReader(fileName);
        BufferedReader bufferedReader = new BufferedReader(fileReader);

        System.out.println(bufferedReader.readLine());
    }
}

但代码无法编译。我收到此错误消息:

hello.java:10:错误:未报告的异常 FileNotFoundException;必须 被抓住或被宣布被扔 FileReader fileReader = new FileReader(fileName); ^ hello.java:13: 错误:未报告的异常 IOException;必须被抓住或宣布被抛出 System.out.println(bufferedReader.readLine());

如果我将文件放在字符串上的硬编码上,我可以打开文件。 但我需要从终端接收它作为输入。

我错过了什么?

【问题讨论】:

  • 即使对文件名进行硬编码,也会出现同样的编译错误。看看您的 IDE 为您提供了哪些解决问题的方法。

标签: java linux file terminal


【解决方案1】:

试试:

import java.util.Scanner;
import java.io.*;

class ItauScript {
public static void main(String[] args) {
    Scanner reader = new Scanner(System.in);
    System.out.println("Filename: ");
    String fileName = reader.next();

    try {
       FileReader fileReader = new FileReader(fileName);
       BufferedReader bufferedReader = new BufferedReader(fileReader);

       System.out.println(bufferedReader.readLine());
    } catch (IOException e) {
        // handle exception (if any) here
    }
}
}

正如其他人所建议的,阅读 IDE/编译器在出现错误时告诉您的内容非常有帮助...

希望有帮助

【讨论】:

    【解决方案2】:

    FileNotFoundException是一个checkedException(和readLine抛出的父类IOException一样),修改main重新抛出1 喜欢

    public static void main(String[] args) throws IOException {
    

    try-catch (with resources)like 包围它

    try (FileReader fileReader = new FileReader(fileName);
            BufferedReader bufferedReader = new BufferedReader(fileReader)) {
        System.out.println(bufferedReader.readLine());
    } catch (IOException e) {
        e.printStackTrace();
    }
    

    1但是你应该还是closebufferedReaderfinally

    【讨论】:

      【解决方案3】:

      您需要处理可能的异常。可以指定封闭方法main抛出异常,但最好自己处理。

      import java.util.Scanner;
      import java.io.*;
      
      class ItauScript {
          public static void main(String[] args) {
              Scanner reader = new Scanner(System.in);
              try
              {
                  System.out.println("Filename: ");
                  String fileName = reader.next();
      
                  FileReader fileReader = new FileReader(fileName);
                  BufferedReader bufferedReader = new BufferedReader(fileReader);
      
                  System.out.println(bufferedReader.readLine());
              }
              catch(IOException e)
              {
                  e.printStackTrace();
                  //TODO handle error
                  return;
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2014-05-04
        • 2013-08-03
        • 1970-01-01
        • 1970-01-01
        • 2021-11-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-15
        相关资源
        最近更新 更多