Чтение файла передается в cmd

1

У меня проблема, которая, вероятно, легка, но не может понять. Я пишу простую 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) 
        }

Я ценю вашу помощь, и я сожалею о своем плохом английском.

Теги:
cmd

2 ответа

1
Лучший ответ

Вы можете попробовать 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 - это полный путь, где находится ваш файл.

Обратите внимание, что когда вы используете < то вы не можете вернуть командную строку в свою собственную программу.

  • 0
    Я получаю сообщение об ошибке: система не может найти указанный файл. У меня был файл vales.txt в той же директории, что и мой файл task1.java. Так что я предполагаю, что это не проблема или нет?
  • 0
    В примере кода VALUES_DIR - это каталог, в котором находится файл values.txt. Также вы можете вызвать Paths.get() только с одним аргументом с полным путем к values.txt. Вам не нужно использовать < здесь, чтобы прочитать файл, вам нужно только передать путь к файлу в вашей программе.
Показать ещё 3 комментария
2

Для этого вы должны использовать буферизованный читатель. Когда вы это сделаете

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));
  • 0
    Хорошо, я буду первым, потому что это то, что мне нужно. Но я получаю ошибку: система не может найти указанный файл. Мой файл находится в той же директории, что и моя программа task1.java
  • 0
    Эта ошибка должна произойти со вторым методом. Вы можете вставить всю ошибку?
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню