NumberFormatException:对于从文件读取时的输入字符串“ \ N”

时间:2019-05-28 16:10:57

标签: java

我正在尝试从大型数据文件中读取movie.dat,然后使用该数据的某些列填充数据库表。

电影文件中的数据具有以下数据字段/列:

ID标题imdbID spanishTitle imdbPictureURL年RTID rtAllCriticsRating rtAllCriticsNumReviews rtAllCriticsNumFresh rtAllCriticsNumRotten rtAllCriticsScore rtTopCriticsRating rtTopCriticsNumReviews rtTopCriticsNumFresh rtTopCriticsNumRotten rtTopCriticsScore rtAudienceRating rtAudienceNumRatings rtAudienceScore rtPictureURL

数据值由制表符分隔。

    String line;

    // open movies file
    BufferedReader reader = new BufferedReader(new FileReader("C:\\Users\\Michael\\IdeaProjects\\hw3\\data\\movies.dat"));
    System.out.println("Movies.dat successfully opened.");

    // read the first line (header) of file
    line = reader.readLine();

    // create PreparedStatement for inserting movie data into db
    try {
        PreparedStatement s = conn.prepareStatement(
                "INSERT INTO Movie(mID, movieTitle, releaseYear, "
                        + "allCriticsRating, allCriticsNumReviews, "
                        + "topCriticsRating, topCriticsNumReviews, "
                        + "audienceRating, audienceNumRatings) "
                        + "VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?)");

        // read remaining lines of data in the file
        while ((line = reader.readLine()) != null) {
            // separate each data field value and store into tmp array
            String[] tmp = line.split("\\t");

            s.setInt(1, Integer.parseInt(tmp[0]));
            s.setString(2, tmp[1]);
            s.setInt(3, Integer.parseInt(tmp[5]));
            s.setFloat(4, Float.parseFloat(tmp[7]));
            s.setInt(5, Integer.parseInt(tmp[8]));
            s.setFloat(6, Float.parseFloat(tmp[12]));
            s.setInt(7, Integer.parseInt(tmp[13]));
            s.setFloat(8, Float.parseFloat(tmp[17]));
            s.setInt(9, Integer.parseInt(tmp[18]));

            s.addBatch();
        }
        s.executeBatch();
        s.close();
        System.out.println("Movie table successfully populated!");
    }
    catch(SQLException e) {
        System.out.println("Movie table population failed.");
        e.printStackTrace();
    }

但是,当我运行此代码时,我在第一个parseFloat上获得了输入字符串“ \ N”的numberformatexception。我不知道“ \ n”可能来自哪里。我使用了相同的代码(针对某些不同的数据字段进行了调整),用来自另一个文件的数据填充其他表,并且工作正常,因此我不确定为什么只是这个文件给我带来了问题。

预先感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您可以更新此行:

  
    

String [] tmp = line.split(“ \ t”);

  

看起来像这样

  
    

String [] tmp = line.strip()。split(“ \ t”);

  

,以及标记之前和之后的多余空白将被删除(包括换行符)