我有一个问题,这可能很容易,但无法弄清楚。我正在编写一个名为task1的简单java程序来读取文件并计算一些值。我在这样的cmd中运行这个程序:
cmd:java task1计算
Word"计算"在" task1"之后是一个参数,它开始我的方法来计算一些值。但我想在一个名为values.txt的文件中计算一些值。我的问题是我不知道如何将我的代码写入该读取文件。此文件在cmd中作为参数传递,如:
希望,你能理解我的问题。如果您能告诉我如何在我的文件中打印此值,那将是非常棒的cmd:java task1 calculate< values.txt
if(args.length == 0)
{
System.out.println("Insert some arguments");
}
else if(args[0].equals("calculate"))
{
//here i would like to read my file (values.txt)
}
感谢您的帮助,我很抱歉我的英语不好。
答案 0 :(得分:2)
你应该使用缓冲读卡器。 当你这样做
cmd: java task1 calculate < values.txt
您将程序中values.txt的内容作为标准输入传递。
代码看起来像这样
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
String line = bufferedReader.readLine();
这样你就可以用BufferedReader读取一行。
有关详情,请参阅http://alvinalexander.com/java/java-bufferedreader-readline-string-examples
PS:也可以直接从磁盘读取文件,无需将其传输到程序中。
你这样做:
BufferedReader bufferedReader = new BufferedReader(new FileReader(filename));
答案 1 :(得分:1)
您可以尝试Files#readAllLines()。这将读取文本文件并存储每一行 列表集合:
//Path valuesPath = Paths.get("VALUES_DIR", "values.txt");
Path valuesPath = Paths.get("./" + args[0]);
try {
List<String> lines = Files.readAllLines(valuesPath, Charset.defaultCharset()));
for (String line : lines) { //print lines (or do whatever you need)
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
其中args[0]
是要读取的文件的名称(在task1.jar所在的同一目录下)。
将您的java程序称为:
java -jar task1.jar values.txt
编辑:
要将管道文件作为标准读取:
BufferedReader in = null;
try {
in = new BufferedReader(new InputStreamReader(System.in));
String line;
while ((line = in.readLine()) != null) { //print lines (or do whatever you need)
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
将您的任务称为:
java task1 calculate < VALUES_PATH\values.txt
VALUES_PATH是文件所在的完整路径。
注意,当您使用<
时,您无法在自己的程序中取回命令行。