Утилита сравнения фалов

242
22 марта 2018, 08:47

Есть утилита для сравнения файлов "test.txt" и "test1.txt". В командной строке работает исправно. Для запуска вводим "java -cp . CompFiles test.txt test1.txt"

(текстовые файлы предварительно помещаются в один каталог и все работает ок)

Но как запустить программу из Eclipse, при этом чтобы сразу указать названия файлов? При замене FileInputStream(args[0]) на FileInputStream("test.txt") все равно не видит файл в каталоге.

import java.io.*;
public class CompFiles {
    public static void main(String[] args) {
  int i = 0, j = 0;
  if (args.length != 2) { //убедиться, что имена файлов передаются программе
      System.out.println("Использование: Compfiles файл1 файл2");
      return;
  }
// Сравнить файлы  
  try ( FileInputStream f1 = new FileInputStream(args[0]);
        FileInputStream f2 = new FileInputStream(args[1]))
  {
      //проверка содержимого файлов 
      do {
          i = f1.read();
          j = f2.read();
         if(i !=j)break;
      } while (i != -1 && j != -1);
      if (i !=j)
          System.out.println("Содержимое отличачется");
      else
          System.out.println("Содержимое совпадает");
  } 
  catch (IOException exc) {
      System.out.println("Ошибка ввода-вывода " + exc);
  }
    }
}
Answer 1

Используйте для получения потока в подобных случаях getResourceAsStream, в дальнейшем поможет избежать проблем с работой из jar.

    FileInputStream f1 = CompFiles .getResourceAsStream("/test.txt");
Answer 2

Все оказалось гораздо проще, чем я думал. При вызове из командной строки все работает. Но чтобы задать значения сразу, нужно убрать оператор проверки if или оператор перехода return:

if (args.length != 2) { //убедиться, что имена файлов передаются программе
      System.out.println("Использование: Compfiles файл1 файл2");
      return;
  }

Утилита видела, что значения командной строки нулевые и переходила в начало через return.

Для указания аргументов напрямую использовать:

FileInputStream f1 = new FileInputStream("test.txt");
FileInputStream f2 = new FileInputStream("testdata.txt")
Answer 3

В каждой среде разработки в настройках проекта есть возможность указать аргументы командной строки и рабочую папку.
В Eclipse - это место в меню Debug и Run в подпункте Debug Configurations и Run Configurations.

READ ALSO
Ошибка при поиске символа в массиве

Ошибка при поиске символа в массиве

Хочу в массиве найти максимально длинное словоНо ошибка строке:

240
Listeners in Java

Listeners in Java

Я не совсем понимаю что такое слушатели в Java,а точнее как их связать с кнопкой,например

221
Приведение null к 0 MongoDB

Приведение null к 0 MongoDB

В базе, в полях таблицы, может встретиться null, там где должно быть 0Как при выборе этого поля его правильно обработать? Сейчас делаю вот так

167
Автоматизация тестирования Jenkins

Автоматизация тестирования Jenkins

Написал проект залил на гит установил JenkinsВзял этот проект из git, как теперь на Jenkins запустить тесты?

187