他のスレッドが継承するベースファイルのプラグインを作成しようとしています。しかし、ファイルが存在し、通常のスレッドから読み込むことができますが、抽象ベースファイルからそのファイルを読み込もうとすると、File not foundと表示されます。ここに私の基本クラスです: - 私はマルチスレッドを意識誰かが素晴らしいものになる問題だものを私に伝えている場合、ファイルからレコードを解析するために、基本クラスで実装されたことがないよ抽象クラスからファイルを読み込めません
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;
}
}
。私はファイルが確実に存在することを知っています。
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);
}
}
しかし、そのは、簡単なmainメソッド使用して、子供のparseRecord
メソッドを呼び出していない: - - :ここに私の子クラスです親のコンストラクタ(BaseFilePlugin.class)が呼び出されるため
package com.evol.fp;
public class StartProcess {
public static void main(String[] args) {
FileReaderThread thd = new FileReaderThread();
thd.start();
}
}
どのように使用/テストしますか? – johnII
nullポインタがありません。ファイルが見つかりません。 –
子クラスから継承した子クラスがあります。子クラスからファイルを読み込んだときに正常に動作しますが、親メソッドを使用するとファイルが見つかりません。 –