有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

numberformatexception在java中将文件名存储在整数变量中

我有一个文件夹,里面有文件,文件名是110045、56789449等整数。文件包含文本值。我想将文件名存储为键,将其内容存储为树映射中的值。但它给出了数字格式例外:

public  void ReadDir()throws Exception{

  Map<Integer,List<String>> tweet = new TreeMap<Integer,List<String>>();         
  File dr = new File("/home/abc/NetBeansProjects/cleantweet");

  if(dr.isDirectory()){
    String dirlist[] = dr.list();
    int nfiles= dirlist.length;
    System.out.print("no 0f user tweet files   "+ nfiles +"\n");

    for(int i =0;i<nfiles;i++){
      tw.assignVal(dirlist[i]);
    }
}

public void assignVal(String filename) throws Exception {
    FileReader fr1 = new FileReader("/home/abc/NetBeansProjects/cleantweet/"+filename);
    BufferedReader br1 = new BufferedReader(fr1);
    String str="";
    while ((str = br1.readLine()) != null) {
      assignment.put(str,rand.nextInt(topics-1)+1);
      recsys.tweet.put(Integer.parseInt(filename),list);// this line gives error
    }
}

共 (4) 个答案

  1. # 1 楼答案

    我认为filename是102。文本 因此,请尝试以下代码:

    try {
     recsys.tweet.put(Integer.parseInt(filename.substring(0, filename.length - 4)),list);
    } catch ( NumberFormatException nfe ) {
     System.out.println("This is not an integer: \"" + filename + "\".");
    } 
    

    如果仍然有错误,可能是因为数量太多。 因此,您可以使用:

    recsys.tweet.put(Long.parseLong(filename.substring(0, filename.length - 4)),list);
    //or use BigInteger
    recsys.tweet.put(new BigInteger(filename.substring(0, filename.length - 4)),list);
    

    您还可以读取包含字符的隐藏文件,因此需要使用以下代码:

    if(dr.isDirectory() && !dr.isHidden()){
    }
    
  2. # 2 楼答案

    您的输入可能是所有数字,但如果等效数字超出32位有符号整数的范围,则会出现此错误

    您的输入必须在-21474836482147483647的范围内

    如果您的值大于这些值,请尝试使用Long来解析64位带符号的long

  3. # 3 楼答案

    try {
        recsys.tweet.put(Integer.parseInt(filename),list);
    } catch ( NumberFormatException nfe ) {
        System.out.println("This is not an integer: \"" + filename + "\".");
    }
    
  4. # 4 楼答案

    您应该检查文件名是否太长,因此对于该数字而言,整数太小