Java文件操作-在控制台输入中读取用户提供的文件名
我必须从控制台中的用户那里获取文件名,比如a.txt,然后打开文件并读取它(更具体地说,将其标记化)。我怎么做?我无法从读卡器中获取文件名并用filename.txt打开它 下面是代码片段: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 如果您想在交互式控制台
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:我改为尝试使用资源。谢谢:)