У меня проблема, которая, вероятно, легка, но не может понять. Я пишу простую java-программу под названием task1, чтобы прочитать файл и вычислить некоторые значения. Я запускаю эту программу в cmd следующим образом:
cmd: java task1 вычисляет
Word "вычисляет" после "task1" - это аргумент, который запускает мой метод для вычисления некоторых значений. Но я хотел бы вычислить некоторые значения в файле с именем values.txt. Моя проблема в том, что я не знаю, как написать свой код для этого файла чтения. Этот файл передается как аргумент в cmd следующим образом:
cmd: java task1 вычисляет <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)
}
Я ценю вашу помощь, и я сожалею о своем плохом английском.
Вы можете попробовать Files # readAllLines(). Это будет читать текстовый файл и хранить каждую строку в коллекции List:
//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 - это полный путь, где находится ваш файл.
Обратите внимание, что когда вы используете <
то вы не можете вернуть командную строку в свою собственную программу.
Для этого вы должны использовать буферизованный читатель. Когда вы это сделаете
cmd: java task1 calculate < values.txt
вы передаете содержимое значений.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));
VALUES_DIR
- это каталог, в котором находится файл values.txt. Также вы можете вызватьPaths.get()
только с одним аргументом с полным путем к values.txt. Вам не нужно использовать<
здесь, чтобы прочитать файл, вам нужно только передать путь к файлу в вашей программе.