2015-11-02 3 views
1

У меня есть простая проблема. Я написал метод в java, чтобы получить содержимое текстового файла.Получить содержимое текстового файла в java?

public static String[] viewSuppliers() 
{ 
    Scanner x = null; 
    try{ 
     x = new Scanner(new File("C:\\Users\\فاطمة\\Downloads\\suppliers.txt")); 
     while(x.hasNext()) 
     { 
      String a = x.next(); 
      String b = x.next(); 
      String c = x.next(); 
      String d = x.next(); 
      String array[] = {a,b,c,d}; 
      return array; 
     } 
     x.close(); 
    } 
    catch(Exception e) 
    { 
     e.printStackTrace(); 
    } 
    return null; 
} 

Я назвал этот метод в основной программе, но он возвращает только одну строку файла. Содержимое моего текстового файла, как это:

PEPSI John London 214222 
COLA Sarah France 478800 

Вот моя основная программа:

String array3[] = {"Supplier Company: ", "Supplier Name: ", "Supplier Address: ", 
    "Supplier Phone Number: "}; 
String array4[] = i.viewSuppliers(); // object of class 
if(i.viewSuppliers() == null) 
    System.out.println("No current suppliers."); 
else 
{ 
    System.out.println("Current Suppliers: "); 
    for(int u = 0; u < array3.length; u++) 
    { 
     System.out.printf(array3[u]); 
     System.out.println(array4[u]); 
    } 
} 

Когда я запустить основную программу и вызвать метод он возвращает только первую строку и я хочу для возврата всего файла.

+1

Вы возвращаете свой массив в конце первой итерации, из-за чего он обрабатывает только первый. – Reisclef

ответ

2

Вместо того, чтобы возвратить массив из 4 строк, , кажется, что вы действительно хотите, чтобы вернуть список массив из 4 строк:

public static List<String[]> viewSuppliers() 
{ 
    List<String[]> lines = new ArrayList<>(); 
    Scanner x = null; 
    try{ 
     x = new Scanner(new File("C:\\Users\\فاطمة\\Downloads\\suppliers.txt")); 
     while(x.hasNext()) 
     { 
      String a = x.next(); 
      String b = x.next(); 
      String c = x.next(); 
      String d = x.next(); 
      String array[] = {a,b,c,d}; 
      lines.add(array); 
     } 
     x.close(); 
    } 
    catch(Exception e) 
    { 
     e.printStackTrace(); 
    } 
    return lines; 
} 

Затем перебирать результаты:

List<String[]> list = i.viewSuppliers(); // object of class 
if (list.isEmpty()) 
    System.out.println("No current suppliers."); 
else 
{ 
    System.out.println("Current Suppliers: "); 
    for (String[] supplier : list) { 
     for(int u = 0; u < array3.length; u++) 
     { 
      System.out.printf(array3[u]); 
      System.out.println(supplier[u]); 
     } 
    } 
} 
+0

wow вы удивительный брат, он работает благодаря вам так много :) –

0

Попробуйте выполнить возврат из цикла while, иначе после первой итерации он вернется.

+0

Да, я пробовал это, но проблема в том, что массив принимает свои аргументы из цикла while, когда возвращается за его пределами, показывает, что массив не объявлен. –

0

У вас есть выход в цикле на основе длины массива 3, но не array4, поэтому он всегда будет печатать только первого поставщика из-за длины массива3.

System.out.println("Current Suppliers: "); 
for(int u = 0; u < array3.length; u++) 
{ 
    System.out.printf(array3[u]); 
    System.out.println(array4[u]); 
} 

Возможно добавление System.out.println (array4) к петле на основе его длины ниже первой петли.