1

Ich versuche mir selbst beizubringen, wie man eine Rohdaten-Textdatei in ein multidimensionales Array ohne viel Glück bisher lesen kann. Hier ist die rohe Textdatei:Wie referenziere ich meine rohe TXT-Datei mit FileReader?

ken todd 
stuart brian 
bob stewart 
orange apple 

green red 

Der Code, den ich habe, wird unten gezeigt.

public void LoadFromFile(){ 

     // int fileId = (getResources().getIdentifier("text_file", 
     //  "raw", getPackageName())); 
     Scanner scan = new Scanner(new FileReader(R.raw.text_file); 
     // initialises the scanner to read the text_file 

     String[][] entries = new String[6][2]; 
     // creates a 2d array with 6 rows and 2 columns. 

     int i = 0; 
     while (scan.hasNextLine()) { 
      entries[i] = scan.nextLine().split("\\s+"); 
      i++; 
     } 
     //loops through the file and splits on a space 

     for (int row = 0; row < entries.length; row++) { 
      for (int col = 0; col < entries[0].length; col++) { 
       if (entries[row][col] != null) { 
        System.out.print(entries[row][col] + " "); 
       } 
      } 
      if (entries[row][0] != null) { 
       System.out.print("\n"); 
      } 
     } 
     //prints the contents of the array that are not "null" 
    } 

Ich erhalte einen Fehler in der Scannerzeile. Insbesondere Filereader (R.raw.text_file) bekomme ich

kann nicht aufgelöst werden Konstruktor ‚Filereader (int)‘

Offensichtlich Filereader ist für einen int suchen, und ich versuchte, das zu tun, indem Sie die Datei-ID setzen int eine int-Variable und dann die int-Variable im FileReader, aber das hat auch nicht funktioniert.

int fileId = (getResources().getIdentifier("text_file", 
     "raw", getPackageName())); 
Scanner scan = new Scanner(new FileReader(fileId); 

Es gab mir den gleichen Fehler

Kann Konstruktor 'Filereader (int)'

nicht lösen Was ich falsch hier? Hat jemand Tipps, wie man eine Datei in ein Array bringt?

Prost

Airfix

Antwort

1

Dank der Anleitung von Doug Stevenson gelang es mir, den Code richtig zu lesen, um eine Datei in ein Array zu lesen. Ich habe ein paar andere Details, die ich aussortieren muss, wie zum Beispiel das Array auf die richtige Größe für die Textdatei zu bringen (anstatt hart zu codieren) und mit einer leeren Zeile in der Textdatei umzugehen.

In der Zwischenzeit hier ist der Arbeitscode eine Textdatei in ein Array zu laden:

public void TextFileReader(){ 

     String[][] textFileData = new String[5][2]; 

     InputStreamReader InputSR = null; 
     BufferedReader BufferedRdr = null; 
     String thisLine = null; 

     InputSR = new InputStreamReader(getResources().openRawResource(R.raw.text_file)); 
     BufferedRdr = new BufferedReader(InputSR); 

     try { 
      // open input stream text_file for reading purpose. 
      int i = 0; 
      while ((thisLine = BufferedRdr.readLine()) != null) { 
       String[] parts = thisLine.split(" "); 
       textFileData[i][0] = parts[0]; 
       textFileData[i][1] = parts[1]; 
       Log.v("String Array"+i+"0", String.valueOf(textFileData[i][0])); 
       Log.v("String Array"+i+"1", String.valueOf(textFileData[i][1])); 
       i = i +1; 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 

     } 
    } 
0

Eine Ressource ist eine Datei auf Ihrer Entwicklungsmaschine. Es ist keine Datei auf dem Android-Gerät. Sie können keinen FileReader verwenden, um darauf zuzugreifen. Verwenden Sie (eine Context aufgerufen), um eine InputStream auf der Ressource zu erhalten.

2

Sie können rohe Ressourcen mit openRawResource(int) lesen. Das wird Ihnen einen InputStream geben, den Sie mit einem InputStreamReader umbrechen können und dann mit einem BufferedReader umbrechen. Sie können dann für diesen BufferedReader verwenden, um Zeilen daraus zu entfernen.

+0

Doug, ich bin nah dran, eine Lösung mit Ihrer Hilfe zu bekommen. Sehen Sie meinen Kern hier. https://gist.github.com/Airfixed/799e784696b0a60c5423d347bf33a341 Wenn jedoch eine leere Zeile in der TXT-Datei ist, funktioniert es nicht. Wie berechne ich eine Leerzeile? – Airfix

Verwandte Themen