2014-01-04 3 views
0

У меня есть папка с файлами, а имя файла - целые числа, такие как 110045, 56789449 и т. Д. Содержит текстовые значения. Я хочу сохранить имя файла как ключ и его содержимое как значение в treemap. но это дает исключение формат номер:сохранение имени файла в целочисленной переменной в java

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

означает, что ваш 'filename' содержит нечто иное, чем цифры (например, , пробелы). –

+1

Вы должны отлаживать то, что именно является содержимым «filename». Возможно, есть нецифровой символ (например, пробелы или расширение файла). –

+0

Вы должны уточнить свои ошибки. Это ошибка времени компиляции? Исключение NullPointerException? – Makoto

ответ

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

thanx это помогло .. – user3104437

1

вы должны проверить, если имя файла слишком длинное, так что Integer будет мал для этого числа

+0

Возможно, это причина, если эти целые числа являются идентификаторами твита Twitter. –

2

Ваш вклад может быть все цифры, но если числовой эквивалент выходит за пределы 32-разрядного целого числа со знаком, вы получите эту ошибку.

Ваш ввод должен быть в диапазоне -2147483648 до 2147483647.

Если у вас есть значения, превышающие эти значения, попробуйте использовать Long для синтаксического анализа 64-разрядной подписи long.

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()){ 
} 
Смежные вопросы