我正在尝试从文件中读取,但是我得到了一些奇怪的结果。以下是我的代码。
class A
{
try{
B writeToFile = new B();
B readFromFile = new B();
File file = new File("C:/Users/HB/workspace/A/src/xyz.txt");
boolean fileExists = file.isFile();
if (fileExists)
{
readFromFile.readFromFile();
}
if(...)
{
//my other code
}
else
throw new Exception (type_op);
}
}
catch(ArrayIndexOutOfBoundsException e)
{
System.out.println("Incorrect number of arguments supplied to command.");
System.out.println("");
}
catch (Exception e)
{
System.out.printf("'%s' is not a valid command.%n",type_op);
System.out.println();
}
我在这里做的是A类是我执行所有操作的主要类。我正在执行某些操作,如果用户输入的操作不是上述操作,则抛出异常。在调试时,我看到找到文件xyz.txt,编译器进入readFromFile()。但是,在while循环中,它会检查文件中的数据,然后抛出异常 -
'operation_inputted_on_console' is not a valid command.
我希望它能从文件中读取,并将其存储在我的arrayList中。
class B
{
public void readFromFile() throws FileNotFoundException
{
Scanner inputStream = null;
inputStream = new Scanner(new FileInputStream("C:/Users/HB/workspace/A/src/xyz.txt"));
while(inputStream.hasNextLine())
{
attribute1=inputStream.next();
attribute2=inputStream.next();
attribute3=inputStream.next();
attribute4=inputStream.nextInt();
attribute5=inputStream.nextInt();
attribute6=inputStream.nextInt();
attribute7=inputStream.nextInt();
addPlayer(attribute1,attribute2,attribute3...);
}
inputStream.close();
}
public void writeToFile() throws FileNotFoundException
{
PrintWriter outputStreamName = new PrintWriter(new FileOutputStream("C:/Users/HB/workspace/A/src/xyz.txt",true));
int size = arrayList.size();
B obj;
//my code
for (int i=0;i<size;i++)
{
//my code
}
outputStreamName.close();
}
}
}
如果从我的类中删除readFromFile(),上面的代码工作正常。 readFromFile在这里出了点问题导致了这个问题。
xyz.txt包含以下内容 -
a,a,a,2,0,2,0
b,b,b,2,2,0,0
c,c,c,2,1,1,0
a,a,a,1,0,1,0
b,b,b,1,1,0,0
答案 0 :(得分:1)
问题是你试图使用next和nextInt解析一行字符串,结果导致InputMismatchException
,它们之间应该有一个没有逗号的空格。
示例:
a a a 2 0 2 0
使用上面的示例,您可以完全使用您的内部代码 while语句,但由于你有逗号,你需要使用split方法将其拆分
在txt文件中使用您的示例
while(inputStream.hasNextLine())
{
string[] line =inputStream.nextLine().split(",");
string firstLetter = line[0];
string secondLetter = line[1];
string thriedLetter = line[2];
int firstNumber = String.parseInt(line[3]);
int secondNumber = String.parseInt(line[4]);
int thriedNumber = String.parseInt(line[5]);
int fourthNumber = String.parseInt(line[6]);
}
使用上面的代码,您现在可以使用逗号
成功解析它