Client クラスからファイルを読み取り、それを Service コンストラクターに渡します。StringTockenizer を使用して、渡された 1 行の文字列を解析しています。有効な行には、正確に 5 つの項目が含まれている必要があります。行に含まれる項目が 5 つより多いか少ない場合は、無効と見なして無視する必要があります。
コンストラクターが例外をスローした場合は、後で Client クラスで処理する必要があります。私が抱えている問題は、ファイルを正しく読み取る方法がわからず、無効な行を無視して、ファイルの最後まで読み続けることです。誰かが私を正しい方向に向けることができますか?
import java.util.StringTokenizer; //allows use of StringTockenizer
import java.util.ArrayList; //allows use of ArrayList
import java.io.Serializable; //allows use of Serializable
public class MailingLabel implements Serializable
{ //start class
public String name, address, city, state, zipCode;
public MailingLabel(String input) throws IllegalMailingLabelException
//accepts String parameter from Client
{ //start constructor
int count = 0;
String extra; //used to hold extra tokens from invalid lines
StringTokenizer token = new StringTokenizer(info, ",");
name = token.nextToken(); //1st token in string
count++;
address = token.nextToken(); //2nd token in string
count++;
city = token.nextToken(); //3rd token in string
count++;
state = token.nextToken(); //4th token in string
count++;
zipCode = token.nextToken(); //5th token in string
count++; //count should equal 5
extra = token.nextToken(); //holds extra tokens
count++;
if (count > 5)
throw new IllegalMailingLabelException("Exactly 5 fields are required");
データの行に 6 つのトークンが含まれている場合、エラーは正常にスローされますが、有効な行に対してエラーがスローされます (行に 6 番目のトークンが含まれていないため)。そのための別の例外を書きたくありません。} //コンストラクタ終了
以下は私の構築された例外です
public class IllegalMailingLabelException extends NoSuchFieldException
{ //start class
public IllegalMailingLabelException(String message)
{ //start constructor
super( message );
} //end constructor
} //end class
//以下はクライアント
import java.io.*; //allows use of BufferedReader & ObjectOutputStream
import java.util.*; //allows use of ArrayList
public class Client1
{ //start class
public static void main(String[] args) throws IOException
{ //start main
String input; //holds each line read from file
try
{ //start try, opens and reads the file
BufferedReader bufIn = new BufferedReader(new FileReader(new File("testData.txt")));
testData.txt のデータ例: 1,2,3,4,5,6 //これは無効なデータである必要があります 1,2,3,4 //これも無効なデータである必要があります 1,2,3,4, 5 //これは有効なデータです
System.out.println("Beginning to read file");
while ( (info = bufIn.readLine()) != null)
{ //start while
try
{ //start try to create new MailingLabel Object
MailingLabel label = new MailingLabel(input);
} //end try
catch(IllegalMailingLabelException e)
{ //start catch, if object not created
//(handles the exception thrown by service)
System.out.println(e.getMessage());
//prints error message from service constructor
} //end catch
} //end while
System.out.println("Finshed reading file");
bufIn.close(); //closes the file
} //end try
catch (FileNotFoundException e) //if file isn't found
{ //start catch
System.out.println("File not found");
} //end catch
} //end main
} //end class
どんな助けでも大歓迎です。