如何从Java中读取文件中的数字?

时间:2009-05-18 15:30:16

标签: java file-io

如何从我的file.txt读取输入(字母,数字),其中它无限读取但只在遇到特殊符号时停止?同时它是数字,即

123,345,abc

它应该翻译ascii代码并添加2个值,结果为123 + 345 = 468

已编辑的问题

这是我的代码;我在file.txt中读取这些字节时遇到了问题。我想将其值转换为我在file.txt

中添加它的值
public class .... {

    static char tmp = 0;

    public static void main(String[] args) {
        try {
            Reader myReader = new FileReader("MyFolder/myFile2.txt");

            List<Character> myList = new ArrayList<Character>();

            /*for(int myData = myInputStream.read();
                  myData != -1;
                  myData = myInputStream.read()){
                System.out.print(" " + (char)myData);
            }*/

            for(int myData = myReader.read();
                myData != -1;
                myData = myReader.read()){
                if((char)myData != ','){
                    myList.add((char)myData);
                }
                else{
                    continue;
                }
            }
            for(Character i: myList)
            {
                tmp = 1;
            }
            String myString = String.valueOf(tmp);
            int num1 = Integer.parseInt(myString);
            int num2 = Integer.parseInt(myString);
            int equal = num1 + num2;

            System.out.print(equal);

            myReader.close();
        }
        catch(FileNotFoundException e){

        }
        catch(IOException e){

        }
    }
}

3 个答案:

答案 0 :(得分:2)

这里有一些基本的代码可以做我认为你要求的东西,建立你已经拥有的东西。

public class .... {

    private static final Pattern COMMA = Pattern.compile(",");

    public static void main(String[] args) {
        try {
            BufferedReader myReader =
                    new BufferedReader(new FileReader("MyFolder/myFile2.txt"));

            List<Integer> myList = new ArrayList<Integer>();
            int total = 0;
            String line;
            while ((line = myReader.readLine()) != null) {
                for (String token : COMMA.split(line)) {
                    try {
                        total += Integer.parseInt(token);
                    } catch (NumberFormatException ex) {
                        System.err.println(token + " is not a number");
                    }
                }
            } 

            System.out.print(total);

            myReader.close();
        } catch(FileNotFoundException e){

        } catch(IOException e){

        }
    }
}

请注意,重新构建它会更好,因此它不是全部都在main()中,并且异常处理不是很好,但我只是在这里寻找基础知识。

答案 1 :(得分:0)

你的工作方式太难了,而且你正在将解析逻辑与文件遍历混合在一起,这使得事情看起来比实际上更复杂:

- 遍历文件的行;

 BufferedReader r = new BufferedReader(new FileReader(myFile)); 
 String line;
  while ((line=r.readLine())!=null)
 {
   parseLine(line)
  }

- 将文件的行分解为您期望的格式。如果表单错误,请将其失败。

private void parseLine(String line)
{
  try{ 
    String[] values = line.split(",");
    //do something useful assuming the line is properly formed
   }
   catch(Exception e)
   {
      //how do you want to handle badly formed lines?
}

答案 2 :(得分:-2)

您可能想查看Apache IO项目。它极大地简化了Java文件操作。

一旦你有了这个库,就可以使用

int finalnumber = 0;
LineIterator it = FileUtils.lineIterator(file, null);
while (it.hasNext()) {
    List<String> segments = Arrays.asList(it.nextLine().split(","));
    for (String segment : segments) {
        try {
            finalnumber += Integer.parseInt(segment);
        } catch (NumberFormatException nfe) {
            //not a number, ignore
        }
    }
}
LineIterator.closeQuietly(it);
System.out.println(finalnumber);

这会将所有数字加在最后一行,忽略非数字。

如果有人想要指定如何使用Apache IO执行此操作,他们可以发布它。我发现使用标准Java IO非常麻烦,我完全避免使用它。

与其他代码相比,这看起来并不简单,但Apache IO确实在幕后做了很多异常处理和细节(你可以看到,因为它是开源的)。如果这就是你想要的,那么你可以使用标准的Java IO,但是如果你想进一步使用Java IO,我仍然推荐它。