私は、生成されたファイルからライブラリをインポートするプログラムを開発中です。 ファイルが正しく生成され、スキャナによって検出されます。最初の行には、次のような単一のintがあります。スキャナでファイルからintを読み取るときにInputMismatchExceptionが発生する
pw.println(cdarchive.getNumber());
コードのどこかにあります。この部分はうまくいくようです。
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:864)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextInt(Scanner.java:2117)
at java.util.Scanner.nextInt(Scanner.java:2076)
at no.hib.dat102.IO.readFile(IO.java:26)
at no.hib.dat102.Menu.start(Menu.java:34)
at no.hib.dat102.CdArchiveClient.main(CdArchiveClient.java:10)
それはこれが私の方法である
int libSize = in.nextInt();
で指しライン:
public class IO {
static final String DELIMITER = "#";
public static CdArchiveADT readFile(String filename) {
Scanner in = null;
CdArchiveADT cda = null;
try
{
File f = new File(filename+".txt");
in = new Scanner(f);
System.out.println(f);
in.useDelimiter(DELIMITER);
int libSize = in.nextInt();
System.out.println("libSize" + libSize);
cda = new CdArchive(libSize);
for (int i=0; i<libSize;i++) {
int inId = in.nextInt();
String inTitle= in.next();
String inArtist = in.next();
String inLabel = in.next();
String inGenre = in.next();
int inYear = in.nextInt();
in.nextLine();
cda.addCd(new CD(inId, inArtist, inTitle, inYear, inGenre, inLabel));
System.out.println("Closing Scanner (input)");
in.close();
}
}
catch (FileNotFoundException e){
System.out.println("Config file not found!");
e.printStackTrace();
}
return cda;
}
EDIT:
この
は私が取得していますエラーですThis is the method that writes to the file:
public static void writeFile(CdArchiveADT cdarchive, String filename) throws IOException {
PrintWriter pw = null;
File file = null;
try {
file = new File(filename +".txt");
// Create the file if it does not already exist
file.createNewFile();
// Writing metadata
pw = new PrintWriter(new FileWriter(file, false));
pw.println(cdarchive.getNumber());
// Writing data, if CdArchive is not empty
if (cdarchive.getCdTable()[0] != null) {
for (int i = 0; i<cdarchive.getNumber(); i++) {
CD c = cdarchive.getCdTable()[i];
pw.print(c.getId()); pw.print(DELIMITER);
pw.print(c.getTitle()); pw.print(DELIMITER);
pw.print(c.getArtist()); pw.print(DELIMITER);
pw.print(c.getLabel()); pw.print(DELIMITER);
pw.print(c.getGenre()); pw.print(DELIMITER);
pw.print(c.getYear()); pw.println(DELIMITER);
}
}
}
catch (FileNotFoundException e)
{
System.out.println("File not found!");
e.printStackTrace();
}
finally
{
if (pw != null)
{
System.out.println("Closing PrintWriter");
pw.close();
}
}
}
aswell使用区切り文字に新しい行を追加することですか? InputMismatchExceptionは、読み取ろうとしているトークンを整数として解釈できないことを示します。 –
これは、 'in.close()' *の中の*現在のハードルを乗り越えたらすぐに、ループがあなたのプログラムを終了させます。代わりにtry-with-resourcesを使用することをお勧めします。 – Andreas
入力ファイルの例を示します。なぜなら、行終端文字を含むファイルの '# 'が良い区切り文字でない理由をよりよく分かりやすくするためです。例えば。第1の行が数字、例えば「42」であり、第2の行が「#」で区切られている場合、例えば。 '1#Title#Artist#Label#Genre#2017'の場合、最初の*トークンはテキスト' 42 \ r \ n1'です。これは間違いなく有効な数字です。 – Andreas