【问题标题】:read digits (instead of int) from a txt file in java [duplicate]从java中的txt文件读取数字(而不是int)[重复]
【发布时间】:2014-12-10 17:06:33
【问题描述】:

我有一个这样的文件

test.txt:

122352352246

12413514316134

现在我想一次读取每个数字,并将其作为一个元素存储在一个列表中。 我尝试使用扫描仪。但它每次都会读取一行,并输出一个长整数。这意味着如果我想获得数字,我需要进一步分隔该整数中的数字。我想必须有一种优雅的方式来每次直接读取一个数字。下面是我的代码

public class readDigits {

public static void main(String[] args) throws IOException{
    List<Integer> list = new ArrayList<Integer>();
    File file = new File("test.txt");
    Scanner in = new Scanner(file);
    int c;
    try {
         while (in.hasNext()){
             c = in.nextInt();
             list.add(c);

        }

    }
    finally {
        System.out.println(list);
        in.close();
    }

}


}

【问题讨论】:

标签: java


【解决方案1】:

试试这个:

byte[] buffer = new byte[2];
try (InputStream str = new FileInputStream("test.txt")) {
    while (str.read(buffer) != -1) {
        System.out.print(new String(buffer));
    }
}

【讨论】:

    【解决方案2】:

    我想肯定有一种优雅的方式可以每次直接读取一个数字。

    一个数字就是一个字符 - 所以你想一次读取一个字符。

    奇怪的是,Scanner 似乎不利于这样做。您可以Scanner 一次读取一个字节,但使用Reader 可能会更好:

    List<Integer> list = new ArrayList<Integer>();
    try (Reader reader = Files.newBufferedReader(Paths.get("test.txt"))) {
        int c;
        while ((c = reader.read()) != -1) {
            char ch = (char) c;
            int value = Character.getNumericValue(ch);
            if (value >= 0) {
                list.add(value);
            }
        }
    }
    System.out.println(list);
    

    或者,您可以读取文件的所有 ,并单独处理每一行 - 这也很简单。

    【讨论】:

      猜你喜欢
      • 2016-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-08
      • 1970-01-01
      • 1970-01-01
      • 2018-11-23
      相关资源
      最近更新 更多