如何用Java中的文件读取整数

时间:2014-12-10 23:24:47

标签: java

好的,所以我想读一下我的整数以及文件中的字符串。到目前为止,我有这个代码,我不断收到错误。我在我的文本文件中有这个:灰色:30 黑色:40 我正在尝试读取字符串以及整数,因为我想将整数设置为字符串值(颜色)

while (strike!=3){  
             Scanner name1 = new Scanner(System.in);      
             System.out.println("Enter A color");
             String nameTaken = name1.next();

         while(filechecker.hasNextLine()){
             list.add(filechecker.nextLine());
         }
         String line =filechecker.nextLine();
            String[] details = line.split(":");//checks for the integer next to the color
         if((list.contains(nameTaken))&&(filechecker.hasNextInt())){
             int points = Integer.parseInt(details[2]);
                  System.out.println("The Answer Exists!! You Got " +details[2]);

2 个答案:

答案 0 :(得分:2)

您没有说明您收到的错误,但我可以从以下代码中看到,您可能会收到NullPointerException或类似内容。

修改:似乎您获得了NoSuchElementException,因为还没有线路可供阅读。

这段代码循环遍历filechecker并将所有行读入列表,直到不再有行为止。紧跟在while块之后的行尝试从中读取另一行,因为您已经全部读取它(它将返回null),它将找不到它。您尝试split的行将因此而抛出异常。

while(filechecker.hasNextLine()){
     list.add(filechecker.nextLine());
}
String line =filechecker.nextLine();  // <-- this line is throwing it. Don't use it here, use your list or do your work in the while loop instead.
String[] details = line.split(":");//checks for the integer next to the color

不要在while {循环播放后filechecker上操作,而是使用您的列表。或者更好的是,完成所有工作 in while循环。

答案 1 :(得分:0)

使用HashMap存储数据可能更容易:

HashMap<String, Integer> colorData = new HashMap<String, Integer>();

然后,您可以使用ObjectOutputStream和ObjectInputStream来编写和读取文件:

void write(String fileName) {
  FileOutputStream fileOut = new FileOutputStream(fileName);
  ObjectOutputStream out = new ObjectOutputStream(fileOut);
  out.writeObject(colorData);
}

void read(String fileName) {
  ObjectInputStream in = null;
  try {
    fileIn = new FileInputStream(fileName);
    in = new ObjectInputStream(fileIn);
    colorData = (HashMap<String, Integer>) in.readObject();
  } catch (Exception e) {
    e.printStackTrace();
  }finally {
    if(objectinputstream != null)
      objectinputstream .close();
  } 
}