Ich versuche, eine Basisdatei Plugin, das andere Threads erben zu machen. Aber ich bin an einem Punkt fest, wo die Datei existiert und kann von einem normalen Thread gelesen werden, aber wenn ich versuche, diese Datei aus einer abstrakten Basisdatei zu lesen, heißt es, dass Datei nicht gefunden wurde. Hier ist meine Basisklasse: -Datei kann nicht von der abstrakten Klasse lesen
package com.evol.fp;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
public abstract class BaseFilePlugin extends Thread implements BaseFileReader{
String filename = "";
File file = null;
boolean fileStarted = false;
boolean fileEnded = false;
public BaseFilePlugin() {
file = new File(filename);
}
public void readFile() {
BufferedReader br = null;
System.out.println("Base call: " + filename);
try {
System.out.println("inbside ");
br = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
if(br.readLine().trim().isEmpty()) {
endFile();
return;
} else {
startFile(filename);
String record;
while((record = br.readLine().trim()) != null) {
parseRecord(record);
}
endFile();
}
} catch(Exception ioe) {
ioe.printStackTrace();
} finally {
try {
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public abstract void parseRecord(String record);
public void startFile(String filename) {
this.fileStarted = true;
this.fileEnded = false;
}
public void endFile() {
file.delete();
this.fileEnded = true;
this.fileStarted = false;
}
public void run() {
while(true) {
System.out.println("Inside run, fileName: " + filename);
System.out.println("Filestarted: " + fileStarted + ", file exists: " + file.exists());
if(!fileStarted) {
readFile();
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/**
* @return the filename
*/
public String getFilename() {
return filename;
}
/**
* @param filename the filename to set
*/
public void setFilename(String filename) {
this.filename = filename;
}
}
Ich bin mir bewusst, Multithreading, aber nie mit der Basisklasse implementiert zu analysieren Datensätze aus einer Datei, wenn mir jemand sagt, was das Problem ist, dass groß sein. Ich weiß, dass die Datei sicher existiert. Hier ist mein Kind Klasse: -
package com.evol.fp;
public class FileReaderThread extends BaseFilePlugin {
public FileReaderThread() {
super.setFilename("E:\\soham\\soham.txt");
}
@Override
public void parseRecord(String record) {
System.out.println(record);
}
}
Aber es ist nicht das parseRecord
Methode des Kindes Aufruf, ein einfaches Hauptmethode: -
package com.evol.fp;
public class StartProcess {
public static void main(String[] args) {
FileReaderThread thd = new FileReaderThread();
thd.start();
}
}
wie verwenden Sie/testen? – johnII
Kein Nullzeiger, Datei nicht gefunden –
Ich habe eine Kindklasse, die diese Basisklasse erbt, wenn ich die Datei von der Kindklasse lese, funktioniert es gut, aber wenn ich die Elternmethode benutze, heißt es Datei nicht gefunden –