Вывод в текстовый файл только уникальные строки на Java

4 апреля 2009

Как получить из входного текстового файла набор строк и вывести во выходной только уникальные строки?

В этой статье мы рассмотрим решение выше поставленной задачи. Для этого сначала нужно создать входной файл под именем “file_enter.txt”. В него необходимо занести соответствующие данные. Выходной будет называться “file_out.txt”. В этот файл нужно записать уникальные строки, т.е. должны отсутствовать повторяющиеся строки.

Пример входного файла:

  • abc
  • asd
  • qwerty
  • zxcv
  • asd
  • mnb
  • abc
  • zxc
  • abc
    Пример выходного файла:

  • abc
  • asd
  • qwerty
  • zxcv
  • mnb
  • zxc

Подготовка завершена, теперь приступим непосредственно к реализации этой задачи. Нам необходимо читать входной файл и при каждом шаге выполнять запись текущей строки в выходной файл и в векторный массив “inputs”, выполняя при этом проверку на отсутствие текущей строки в нашем массиве “inputs”. Для удобства создадим объект (функцию) “isnotStr(inputs, s)” с входными параметрами “inputs” и “s”, где “inputs” - наш векторный массив, “s” – стока из входного файла. Реализуем наши действия в программный код:

Главный метод:

public static void main(String[] args) {
	String file_enter = "file_enter.txt", file_out = "file_out.txt";
	File fname = new File(file_out);
	try	{
		RandomAccessFile bstr =
		new RandomAccessFile(file_enter, "r");
		PrintWriter bstr2 = new PrintWriter(fname);
		String s;
		Vector inputs = new Vector();
		while( (s = bstr.readLine()) != null )
			if( isnotStr(inputs, s) ) {
				inputs.addElement(s);
				bstr2.println(s);
			}
		bstr.close();
		bstr2.close();
		inputs.clear();
		System.out.println("");
	} catch (IOException e)	{
		e.printStackTrace();
	}
	
	PrintFile(file_out);
}

Объект “isnotStr(Vector inputs, String str)”

public boolean isnotStr(Vector inputs, String str) {
	for(int j = 0; j < inputs.size(); j++)
		if(inputs.get(j).equals(str))
			return false;
	
	return true;
}

На последнем этапе мы реализуем вывод на экран содержимое выходного файла. Там находятся, полученные в ходе выполнения программы, уникальные строки из входного файла. Здесь совсем все просто, читаем файл и построчно выводим данные на экран. Эти действия мы поместим в отдельный метод под названием “PrintFile(file_out)”, где “file_out” – наш выходной файл. Вот собственно этот метод:

Метод “PrintFile(String name)”

public void PrintFile(String name) {
	try {
		RandomAccessFile bstr =
		new RandomAccessFile(name, "r");
		String s;
		while((s = bstr.readLine()) != null)
			System.out.println(s);
		bstr.close();
	}
	catch (IOException e) {
		e.printStackTrace();
	}
}

Запустив наше приложение, выходной файл заполнится строками из входного файла, причем будут отсутствовать повторяющиеся строки. Наша задача решена.

Автор: Евтеев Евгений Александрович