Durchsuchen von Dateien in Thread

chocox

Mitglied
Hey together,

ich möchte eine variable Anzahl von Dateiinhalten auf Schlüsselwörter (welche ebenfalls in einer Datei stehen) überprüfen und ausgeben lassen, falls das Schlüsselwort gefunden wird. Da die Anzahl und Größe sehr hoch ist soll das ganze in einem Thread geschehen. Und zwar mit Hilfe des Interface Callable, da dieses einen Rückgabewert liefern kann. Jetzt hab ich das getreu Java Core 2 nachimplementiert doch leider ohne Verbesserung der Laufzeit. Hier mal der Code...Hoffe mir kann jemand helfen...beim debuggen stellte ich fest, dass nur 1 Thread gestartet ist.
Code:
public class FileTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		File f = new File("C:/Users/XMLPlzDatei /Sheets1_12/plz_neu2");
		File[] fileArray = f.listFiles();
	    for (File file : fileArray) {
	    	 ArrayList<Future<String>> result = new ArrayList<Future<String>>();
	    	 MyCallable demoThread = new MyCallable(file);
		     FutureTask<Vector> task = new FutureTask<Vector>(demoThread);
		     
		     Thread t = new Thread(task);
			 t.start();
			 try {
				System.out.print(task.get() + "\n");
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (ExecutionException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
	   }

	}

}

Sooo und hier die Klasse MyCallable...in der call-Methode wird die Prüfung übernommen, ob das schlüsselwort in der Datei enthalten ist.
Code:
public class MyCallable implements Callable<Vector> {
	private File directory;

	private static Vector vec_ausgabe = new Vector();

	public MyCallable(File directory) {
		this.directory = directory;

	}

	@Override
	public Vector call() throws Exception {
		// TODO Auto-generated method stub

		try {
			boolean insert = false;
			FileInputStream lFiInput = new FileInputStream(directory
					.getAbsolutePath());
			BufferedReader br = new BufferedReader(new InputStreamReader(
					lFiInput));
			String lLine;
			// System.out.println(file);

			// Vector ausgabe = new Vector();

			try {
				Segment sendung = new Segment();

				while ((lLine = br.readLine()) != null) {

					if (lLine.contentEquals("BENV")) {

						insert = true;
						sendung = new Segment();
						sendung.setContent(lLine);

					}

					else if (lLine.contains("EENV")) {
						// sendung.setContent(lLines);
						insert = false;
						sendung.setContent(lLine);

						FileInputStream lFiInputPruef = new FileInputStream(
								new File(
										"C:/Users/twilfer/Documents/Aktenzeichen.txt"));
						BufferedReader br_pruef = new BufferedReader(
								new InputStreamReader(lFiInputPruef));
						String lLine_pruef;

						while ((lLine_pruef = br_pruef.readLine()) != null) {
							String aktenzeichen = lLine_pruef;
							boolean ausgabe_bool = sendung
									.isIncluded(aktenzeichen);
							if (ausgabe_bool == true) {

								vec_ausgabe.add(sendung);

							}
						}

					} else if (insert) {
						sendung.setContent(lLine);
					}

				}

			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

			// ausgabe.clear();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		return vec_ausgabe;

	}

}
 
Sofern die Dateien nicht auf unterschiedlichen Festplatten stehen kannst du das mit Threads auch nicht groß verbessern würde ich mal sagen. Könntest höchstens paar Dateien in speicher lesen und dann gleichzeitig durchsuchen. Aber sobald du in jedem Thread von der Festplatte liest, warten nunmal alle auf die Festplatte.
 
Zurück