Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java文件操作-在控制台输入中读取用户提供的文件名_Java_File - Fatal编程技术网

Java文件操作-在控制台输入中读取用户提供的文件名

Java文件操作-在控制台输入中读取用户提供的文件名,java,file,Java,File,我必须从控制台中的用户那里获取文件名,比如a.txt,然后打开文件并读取它(更具体地说,将其标记化)。我怎么做?我无法从读卡器中获取文件名并用filename.txt打开它 下面是代码片段: String file = args[0]; BufferedReader reader = new BufferedReader(new FileReader(file)); args[0]将引用第一个命令行参数,例如 java Foo filename.txt 如果您想在交互式控制台

我必须从控制台中的用户那里获取文件名,比如a.txt,然后打开文件并读取它(更具体地说,将其标记化)。我怎么做?我无法从读卡器中获取文件名并用filename.txt打开它

下面是代码片段:

    String file = args[0];
    BufferedReader reader = new BufferedReader(new FileReader(file));

args[0]
将引用第一个命令行参数,例如

java Foo filename.txt
如果您想在交互式控制台上使用它,即在程序启动后,您应该在中使用系统

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String filename = reader.readLine();

(顺便说一句,我建议不要使用
FileReader
——它总是使用平台默认编码。我建议使用
FileInputStream
包装在
InputStreamReader
中,或者只使用默认为UTF-8但有重载允许您指定编码的
FileInputStream

如果您计划获取用户输入,请使用

Scanner sc = new Scanner(System.in);
String fileName = sc.nextLine();
System.out.println("file name"+fileName);
请尝试从控制台获取文件名。 如果要进入BufferedReader,请指定文件的完整路径

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class FileReadCommandLine {

        public static void main(String[] args) {

                BufferedReader br = null;

                try {

                        String sCurrentLine;

                        br = new BufferedReader(new FileReader(args[0]));

                        while ((sCurrentLine = br.readLine()) != null) {
                                System.out.println(sCurrentLine);
                        }

                } catch (IOException e) {
                        e.printStackTrace();
                } finally {
                        try {
                                if (br != null)
                                        br.close();
                        } catch (IOException ex) {
                                ex.printStackTrace();
                        }
                }

        }
}
因此,这里接受args[0]中的命令行参数,该参数将是您需要的文件名 将在命令提示中指定。假设您的文件和java程序位于同一文件夹中
然后使用bufferedReader逐行读取文件。

定义“无法”。如何调用程序?运行时会发生什么情况?@jbnitet:I get“文件无法解析为变量”错误。@goaloriendprogrammer:您发布的代码没有使用标识符
文件
。如果你能展示一个简短但完整的程序来演示这个问题,包括错误的全文,并指出它指的是哪一行,这会有所帮助。我对错误的性质不是很确定。当我更改为BufferedReader reader=new BufferedReader(new FileReader(args[0]);。它顺利地工作了。我想你现在能明白问题是什么了。我现在已经用try-with-resources技术解决了这个问题。谢谢@JonSkeet。假设我从用户处获取文件名为“A”。@Goalorientedprogrammer:我建议了两个选项-
FileInputStream
或使用
Files.newbuffereder
。不清楚这里有什么问题,谢谢。我现在明白了。谢谢你。还有一个疑问。我将文件放在我试图打开的系统中的何处?除非OP使用Java 6或更早版本,否则try with resources语句会简单得多。@Goalorientedprogrammer您可以将它们与Java程序放在同一文件夹中,在这种情况下,您不必指定任何路径。但如果您将它们保存在其他文件夹中,则必须指定该路径,例如br=new BufferedReader(new FileReader(“C:\\testing.txt”);因此,如果您知道所有文件都在C:目录下,那么您可以在命令提示下获取文件名,并使用路径指定文件名,例如br=new BufferedReader(new FileReader(“C:\\”+args[0]);谢谢@akaElement@JonSkeet:我改为尝试使用资源。谢谢:)