1

我有一个像这样定义的类,具有适当的 getter 和 setter 方法......

public class Album {
    private int id;
    private String artist;
    private String name;
    private int published;
}

我还有一个 .csv 文件,用于存储许多专辑的内容。在文件中,一行代表一张专辑。

我正在尝试从 .csv 文件中读取信息,然后使用Album类的设置器来分配值。这是我的代码...

public Map<Integer, Album> load() {

    Scanner scanner = new Scanner(fileName);
    Map<Integer, Album> loadedAlbums = new HashMap<Integer, Album>();

    while(scanner.hasNextLine()) {
        Album album = new Album();

        String[] albumDivided = scanner.nextLine().split(","); 
        //in the .csv file every unit of information is divided by a comma.

        album.setId(Integer.parseInt(albumDivided[0])); //this is line 11.
        album.setArtist(albumDivided[1]);
        album.setName(albumDivided[2]);
        album.setPublished(Integer.parseInt(albumDivided[3]));

        loadedAlbums.put(album.getId(), album);

    }

    return loadedAlbums;
}   

但是,尝试使用此代码时,我得到以下异常:

java.lang.NumberFormatException:对于输入字符串:第 11 行的“albums.csv”。

你能帮我理解这个问题的原因吗?

4

3 回答 3

1

那么问题是由异常向您描述的......

ANumberFormatException将由您的Integer.parseInt()一条线路触发。触发异常的代码行是第 11 行(根据异常消息)-不确定这是哪一行,但可能是第一Integer.parseInt()行。

您的代码正在尝试将值“albums.csv”转换为数字,这显然不是。因此,在您的 CSV 文件中的某处,您必须有一行包含值albums.csv,它需要一个数字。

希望这有助于查明问题。

于 2012-04-11T13:29:37.207 回答
1

由于您不想要整个解决方案,因此这里提示解决您的问题:

您应该查看Scanner 类的 API 文档。仔细查看需要单个 String 参数的构造函数(当您在代码中使用它时)。

于 2012-04-11T13:32:57.357 回答
1

据我所知,albumDivided[0] 将包含“1”。由于点,它将无法解析为整数。从 csv 文件中删除点,或者在将点解析为整数之前创建一个删除点的新字符串。该方法可能如下所示:

String newString;
for(int i=0;i<albumDivided[0].length-1;i++){ //length -1 to remove the dot
   newString = newString + albumDivided[0].charAt(i); //get the string stored in albumDivided[0] and add each char to the new string
}
于 2012-04-11T13:42:52.927 回答