Java 从JOptionPane.showInputDialog创建InputStreamReader

Java 从JOptionPane.showInputDialog创建InputStreamReader,java,Java,我想提示用户输入一个文件名,并将该输入传递到InputStreamReader以读取它。我的代码有什么问题 result = JOptionPane.showInputDialog(null, "Enter a file"); BufferedReader reader = new BufferedReader(new InputStreamReader(result)); String fileName = null; try {

我想提示用户输入一个文件名,并将该输入传递到InputStreamReader以读取它。我的代码有什么问题

    result = JOptionPane.showInputDialog(null, "Enter a file");

    BufferedReader reader = new BufferedReader(new InputStreamReader(result));            

    String fileName = null;

    try {

        fileName = reader.readLine();

    } catch (IOException ioe) {

        System.out.println("Eingabe konnte nicht verarbeitet werden!");
        System.exit(1);

    }
您不需要BufferedReader来读取文件名,但稍后将使用它来读取其内容。文件名已由showInputDialog本身返回给您。所以,你需要

String fileName = JOptionPane.showInputDialog(null, "Enter a file");
如果希望用户从本地系统中选择文件,最好使用JFileChooser对话框

您使用的方法返回一个字符串对象,其中包含输入的文本,因此您的结果也必须是字符串。我猜它将包含您要读取的文件的路径

如果查看,您将注意到不能用字符串实例化新的。 但是没有必要这样做,因为您不想从表示路径的字符串中读取,而是从文件的InputStream中读取

试试这个:

String path= JOptionPane.showInputDialog(null, "Enter a file");
File file = new File(path);


try {
    BufferedReader reader = new BufferedReader(new FileReader(file));  
    String firstLine = reader.readLine();
} catch (IOException | FileNotFoundException ioe) {

    System.out.println("Eingabe konnte nicht verarbeitet werden!");
    System.exit(1);

}

编译错误告诉您什么?BufferedReader reader=new BufferedReadernew InputStreamReaderresult;必须是BufferedReader reader=new BufferedReadernew FileReaderresult;谢谢,它起作用了。我需要文件名将其发送到服务器,因此它不在我的硬盘上。好的,在这种情况下,您当前的方法可以正常工作。摆脱这个阅读器。@stuXnet实际上,我还演示了JFileChooser中可用的不同方法。但是,我同意它看起来很冗长。关于空值,你能解释一下吗?@RaviThapliyal我不是说空值。您可以在JFileChooser中键入abcde,然后单击打开/保存,它将返回所选工作目录中abcde的文件对象,即使没有文件abcde。所以,你不能相信choosen文件确实存在。这对用户来说更方便。@stuXnet你说得对。我想,我会改写我的答案。
String path= JOptionPane.showInputDialog(null, "Enter a file");
File file = new File(path);


try {
    BufferedReader reader = new BufferedReader(new FileReader(file));  
    String firstLine = reader.readLine();
} catch (IOException | FileNotFoundException ioe) {

    System.out.println("Eingabe konnte nicht verarbeitet werden!");
    System.exit(1);

}