26: Dateien 1 – Einlesen von Daten

 

Gegeben ist eine Datei “daten.txt”, welche je Zeile einen ganzzahligen Wert besitzt. Lesen Sie diese Datei ein und protokollieren in der Ausgabedatei “doppelt.txt” alle in der gelesenen Datei doppelt vorkommenden Werte.
Wie lautet das Programm, wenn Werte auch mehrfach (> 2-fach) in der Eingabedatei vorkommen können, jedoch jeder mehrfach vorkommende Wert nur einmal in der Ausgabedatei protokolliert werden soll?

Lösung

import java.io.*;
import java.util.Scanner;
import java.util.Vector;

public class Aufgabe26
{
	public static void main(String[] args)
	{
		// Variablen Deklaration
		String sQuellDateiName, sZielDateiName;
		File fleDatei;
		Scanner scnEingabe;
		PrintStream pstAusgabe;
		Vector<Integer> iZahlen;
		Vector<Integer> iDoppelt;

		// Variablen Initialisierung
		sQuellDateiName = "daten.txt";
		sZielDateiName = "doppelt.txt";
		fleDatei = new File(sQuellDateiName);
		iZahlen = new Vector<Integer>();
		iDoppelt = new Vector<Integer>();

		try
		{
			scnEingabe = new Scanner(fleDatei);

			while (scnEingabe.hasNextInt())
				iZahlen.add(scnEingabe.nextInt());

			for (int i = 0; i < iZahlen.size(); ++ i)
				for (int j = 0; j < i; ++ j)
					if (iZahlen.elementAt(j) == iZahlen.elementAt(i))
					{
						boolean bNeu = true;
						for (int k = 0; k < iDoppelt.size(); ++ k)
							if (iZahlen.elementAt(j) == iDoppelt.elementAt(k))
								bNeu = false;
						if (bNeu)
							iDoppelt.add(iZahlen.elementAt(i));
					} // end if

		} // end try
		catch (FileNotFoundException e)
		{
			System.out.println("Datei konnte nicht gelesen werden!");
		} // end catch

		fleDatei = new File(sZielDateiName);

		try
		{
			pstAusgabe = new PrintStream(fleDatei);
			for (int i = 0; i < iDoppelt.size(); ++ i)
				pstAusgabe.println(iDoppelt.elementAt(i));
		} // end try
		catch (FileNotFoundException e)
		{
			System.out.println("Datei nicht gefunden");
		} // end catch
	}
}