2008-11-20 26 views
13
File fil = new File("Tall.txt"); 
FileReader inputFil = new FileReader(fil); 
BufferedReader in = new BufferedReader(inputFil); 

int [] tall = new int [100]; 

String s =in.readLine(); 

while(s!=null) 
{ 
    int i = 0; 
    tall[i] = Integer.parseInt(s); //this is line 19 
    System.out.println(tall[i]); 
    s = in.readLine(); 
} 

in.close(); 

"Tall.txt" dosyasını, "tall" adlı diziye içersindeki tam sayıları yazmak için kullanmaya çalışıyorum. Bu bir dereceye kadar bunu yapar, ama bunu çalıştırdığınızda da, bu şu istisna (atar:?Java: Bir dosyadan tamsayıları bir diziye okuma

Exception in thread "main" java.lang.NumberFormatException: For input string: "" 
    at java.lang.NumberFormatException.forInputString(Unknown Source) 
    at java.lang.Integer.parseInt(Unknown Source) 
    at java.lang.Integer.parseInt(Unknown Source) 
    at BinarySok.main(BinarySok.java:19) 

Neden tam bu işe yarar ve Gördüğüm kadarıyla nasıl kaldırabilirim yapmak, okudum yasadışı olmadığı, ints dönüştürmek ardından dizeleri olarak dosya ve

+0

BTW, "i" ise döngü dışında ilan etmeli. eğer değilse, her zaman dizilerinizdeki dizini 0'a eklersiniz. –

+1

BTW, "bu satır 19" yorumu "Şimdiye kadar gördüğüm en iyi yorum" adayıdır. Hangi IDE kullanıyorsunuz? –

+0

Oraya nasıl geldiğini hiç bilmiyorum. Sanırım kodun bir kısmını bir yerlerden aldım ve görünüşe göre yorumlar geldi. Tüm olasılıkla – Northener

cevap

9

Sen dosyasında boş bir satır olması gerekir

bir "dene" bloğunda sizin parseInt aramaları sarmak isteyebilirsiniz

..:

try { 
    tall[i++] = Integer.parseInt(s); 
} 
catch (NumberFormatException ex) { 
    continue; 
} 

Veya s ayrıştırma önce boş dizeleri çek ima: döngü içinde değişken i Dizininizi başlatarak, bu 0. her zaman açıktır

if (s.length() == 0) 
    continue; 

Not Sen while döngü öncesinde bildiriyi hareket etmelidir. (Veya bir for döngüsünün parçası olun.)

+1

, dosyanın LAST çizgisidir. –

2

Java boş bir dizeyi bir sayıya dönüştürmeye çalışıyor gibi görünüyor. Sayı serisinin sonunda boş bir satır var mı?

Muhtemelen Farklı satır sonları arasındaki karışıklıklar olabilir bu

String s = in.readLine(); 
int i = 0; 

while (s != null) { 
    // Skip empty lines. 
    s = s.trim(); 
    if (s.length() == 0) { 
     continue; 
    } 

    tall[i] = Integer.parseInt(s); // This is line 19. 
    System.out.println(tall[i]); 
    s = in.readLine(); 
    i++; 
} 

in.close(); 
1

gibi kod düzeltmek. Bir Windows dosyası, her satırın bir satır başı ve satır beslemesiyle sona erer. Unix'teki bazı programlar bu dosyayı her satır arasında ekstra boş bir satır gibi okur, çünkü satır sonu olarak satırbaşı geri dönüşünü görür ve sonra satır beslemesini başka bir satır sonu olarak görür. (Eğer java 5 & kadar iseniz)

+1

Hayır, uygulamanın hangi platformda çalıştığı önemli değil, BufferedReader her zaman üç tür satır ayırıcıyı kontrol eder: \ r \ n (satır başı + linfeed), \ n (yalnızca satır besleme) ve \ r (sadece taşıma-dönüşü). –

40

Sen Karşılaştırma için

Scanner scanner = new Scanner(new File("tall.txt")); 
int [] tall = new int [100]; 
int i = 0; 
while(scanner.hasNextInt()){ 
    tall[i++] = scanner.nextInt(); 
} 
+4

Kaç tane tam sayı olduğunu bilmiyorsanız ne olur? – Vanuan

+5

@Vanuan: java.util.ArrayList' –

3

böyle bir şey yapmak isteyebilirsiniz, burada dosyayı okumak için başka bir yoludur. Dosyada kaç tane tamsayı olduğunu bilmenize gerek yok bir avantajı vardır.

File file = new File("Tall.txt"); 
byte[] bytes = new byte[(int) file.length()]; 
FileInputStream fis = new FileInputStream(file); 
fis.read(bytes); 
fis.close(); 
String[] valueStr = new String(bytes).trim().split("\\s+"); 
int[] tall = new int[valueStr.length]; 
for (int i = 0; i < valueStr.length; i++) 
    tall[i] = Integer.parseInt(valueStr[i]); 
System.out.println(Arrays.asList(tall)); 
0
File file = new File("E:/Responsibility.txt"); 
    Scanner scanner = new Scanner(file); 
    List<Integer> integers = new ArrayList<>(); 
    while (scanner.hasNext()) { 
     if (scanner.hasNextInt()) { 
      integers.add(scanner.nextInt()); 
     } else { 
      scanner.next(); 
     } 
    } 
    System.out.println(integers); 
İlgili konular