如何在Java中导入ASCII文件?

如何在Java中导入ASCII文件?,java,ascii,Java,Ascii,我有密码: package package; import java.io.BufferedReader; import java.io.FileReader; import java.util.ArrayList; import java.util.List; public class Test { private List<Integer> liczby = new ArrayList<Integer>(); public void dodaj

我有密码:

package package;

import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;

public class Test {

    private List<Integer> liczby = new ArrayList<Integer>();

    public void dodajLiczbe(int liczba) {
        liczby.add(liczba);
    }

    public int wezLiczbe(int indeks) {
        return liczby.get(indeks);
    }

    public int ileLiczb() {
        return liczby.size();
    }

    public static void main(String[] args) {
        Test w = new Test();

        String nazwaPliku = "file.xyz";

        try {
            BufferedReader br = new BufferedReader(new FileReader(nazwaPliku));
            String linia = null;
            while ((linia = br.readLine()) != null) {
                int liczba = Integer.parseInt(linia.trim());
                w.dodajLiczbe(liczba);
            }
        } catch (Exception e) {
            System.err.println("Wystapil blad przy wczytywaniu danych");
            e.printStackTrace();
        }
        System.out.println("Wczytanych liczb: " + w.ileLiczb());
    }

}
第一列必须带“.”。如果你有更好的选择,请告诉我。file.xyz中的第一行:

0.000 210 62
0.000 217 79
0.000 224 91
0.000 231 99
0.000 238 109

您正在调用
Integer.parseInt(linia.trim())
,但第一行不是有效的数字,因为它包含空格。您需要首先将
linia.trim()
的输出解析为
字符串
,然后再将其片段转换为
整数

String[] parts = linia.trim().split(" ");
Integer firstNumber = Integer.parseInt(parts[0]);

@Pshemo建议的更好方法可能是使用该类。

开始使用Scanner。它有
nextDouble
nextInt
方法,所以您不需要自己编写解析代码。如果您希望的是
,而不是
,则可能需要设置适当的区域设置(如locale.English)。“我无法将结果添加到我的列表”为什么?您是否有任何错误?您的
liczby
列表被声明为
ArrayList
,这意味着它只能存储
字符串
,但在您的注释中,您说要存储int,这有点让人困惑。如果要将数字存储为文本,只需使用
next()
而不是
nextDouble()
nextInt()
。但我还是不知道这是不是个好主意。也许描述一下在从文件中读入数据后,您想对这些数据做什么。是的,eclipse:当dodajLiczbe参数有nextDouble时,我应该将它改为double,与nextindt相同,但改为int参数。@JoeMichu它看起来像
hasNextDouble
没有将
0.000
视为正确的
double
。如果您的语言环境期望Double具有
而不是
(并且根据您的代码,您的默认语言环境似乎是Polish,它期望
)。要解决此问题,请将扫描仪的区域设置设置为一个期望值
的值,如
locale.ENGLISH
(在读取任何数据之前执行此操作:
input.useLocale(locale.ENGLISH);
)。好的,但当我尝试使用扫描仪时,ArrayList应该是整数?@JoeMichu如何将数据存储到该列表中?是否要存储所有元素?应如何处理
double
值?你想全部忽略它们,还是忽略它们的分数部分?@Pshemo,我想以与文件中相同的顺序存储数据。我想存储所有元素,我有168 810行,所以我的列表中应该有3倍多的记录。
String[] parts = linia.trim().split(" ");
Integer firstNumber = Integer.parseInt(parts[0]);