2013-08-18 3 views
0

есть проблема с чтением файла в java и сохранение каждого элемента в 2 массива. мой TXT сделан как этотЧтение txt и сохранение в массив, java

2,3 
5 
4 
2 
3 
1 

, где первая строка является длина двух массива А = 2 и В = 3, а затем элемент каждого массива. Я не знаю, как сохранить их в A и B и инициализировать массив с их длиной. В конце каждый массив будет А = [5,4] В = [2,3,1]

public static void main(String args[]) 
     { 
     try{ 
// Open the file that is the first 
// command line parameter 

      FileInputStream fstream = new FileInputStream("prova.txt"); 
      BufferedReader br = new BufferedReader(new InputStreamReader(fstream)); 
      String strLine; 
//Read File Line By Line 
      while ((strLine = br.readLine()) != " ") { 
       String[] delims = strLine.split(","); 
       String m = delims[0]; 
       String n = delims[1]; 
       System.out.println("First word: "+m); 
       System.out.println("First word: "+n); 
      } 
//Close the input stream 
      in.close(); 
      }catch (Exception e){//Catch exception if any 
       System.err.println("Error: " + e.getMessage()); 
       } 
     } 
    } 

это то, что я made..i используется System.out.println .... просто для печати в консоли это не обязательно ... Кто-то может мне помочь, дайте мне совет? заранее заблаговременно

+0

[Не сравнивать строки с '==' или '! ='] (Http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java) вместо этого использовать ' equals() '. – Pshemo

+0

@Pshemo: Да, я видел это после того, как я разместил это. Он не должен даже проверять это, и не должен иметь петлю во всем в своем коде, а скорее для циклов, так как он будет знать, сколько раз он должен зацикливаться до циклов. –

+1

К оригинальному плакату: ключ к решению большинства проблем программирования - это разбить большую проблему на маленькие шаги, а затем попытаться решить каждый маленький шаг по одному за раз. Опять же, ваш код не должен содержать никаких циклов while, а скорее для циклов, так как вы будете знать, сколько раз вы хотите зацикливать * до * каждого цикла. Вы также захотите закрыть BufferedReader в блоке finally. –

ответ

1

Опять сломайте большую проблему на маленькие шаги, решите каждый шаг.

  1. Прочитать первую строку.
  2. Проведите первую строчку, чтобы получить размеры двух массивов.
  3. Создать массивы.
  4. Завершить первый период длины массива и заполнить первый массив.
  5. Цикл второй длины массива и заполнение второго массива.
  6. Закрыть BufferedReader в блоке finally (обязательно объявите его перед блоком try).
  7. Показать результаты.
+1

+1 Мне нравятся общие ответы на домашние задания, особенно те, у кого нет кода :) – Pshemo

+0

@Pshemo: спасибо!:) –

0

Матч этот ответ с шагами, описанными в @ ответ суда на воздушной подушке в

String strLine = br.readLine(); // step 1 

if (strLine != null) { 
    String[] delims = strLine.split(","); // step 2 

    // step 3 
    int[] a = new int[Integer.parseInt(delims[0])]; 
    int[] b = new int[Integer.parseInt(delims[1])]; 

    // step 4 
    for (int i=0; i < a.length; i++) 
    a[i] = Integer.parseInt(br.readLine()); 

    // step 5 
    for (int i=0; i < b.length; i++) 
    b[i] = Integer.parseInt(br.readLine()); 

    br.close(); // step 6 

    // step 7 
    System.out.println(Arrays.toString(a)); 
    System.out.println(Arrays.toString(b)); 
} 

Заметьте, я назвал br.close(). С in.close() вы закрываете только внутренний поток и оставляете BufferedReader еще открытым. Но закрытие внешнего обтекаемого потока закрывает все обернутые внутренние потоки автоматически. Обратите внимание: этот очищающий код, как это, должен всегда идти в блоке finally.

Кроме того, нет необходимости иметь DataInputStream и InputStreamReader в цепи. Просто оберните BufferedReader вокруг FileReader напрямую.

Если все эти классы вас немного смущают; просто помните, что классы Stream используются для чтения на уровне байта, а классы Reader используются для чтения на уровне символов. Итак, вам нужно только Reader.

+1

Впечатляющий код. Но не лучше ли бы, чтобы OP обнаружил свой собственный впечатляющий код? Вы принимаете удовольствие, волнение и учитесь из кодирования, передавая ему ложный ответ. –

+0

Уверенный проголосовать мой http://stackoverflow.com/questions/11335203/calendar-add-method-error-when-going-beyond-the-year вопрос, если вы хотите, rep не имеет значения для меня, или лучше тем не менее, обращайтесь к моим проблемам в комментарии здесь о том, почему вы решили заманить ФП и что вы надеетесь, что он сможет ею воспользоваться. –

+0

Проверьте +5 Я только что дал вам. (+ 4/-1) –