我有一个文件夹,文件名是整数,如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
}
}
答案 0 :(得分:2)
您的输入可能是所有数字,但如果数字等效值超出32位有符号整数的范围,您将收到此错误。
您的输入必须在-2147483648
到2147483647
范围内。
如果您的值大于这些值,请尝试使用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()){
}