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

时间:2014-01-04 20:54:14

标签: java numberformatexception

我有一个文件夹,文件名是整数,如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 个答案:

答案 0 :(得分:2)

您的输入可能是所有数字,但如果数字等效值超出32位有符号整数的范围,您将收到此错误。

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

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

答案 1 :(得分:1)

你应该检查文件名是否太长,所以对于那个数字,整数将是小的

答案 2 :(得分:0)

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

答案 3 :(得分:0)

我认为filename为102.txt 所以试试这段代码:

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()){
}