2016-07-07 5 views
-2

tut mir Leid mit für Java so Noob zu sein mit,lesen und schreiben txt Scanner java

Ich habe folgendes Problem:

Ich möchte ein Array mit dem gleichen Punkt für den Zugriff auf 8 TXT-Dateien und bauen aus jeder Datei; Beispiel:

Ausgabe (1,1) = [Datei1 (Punkt (1,1), Datei2 (Punkt (1,1), Datei3 (Punkt (1,1), Datei4 (Punkt (1,1) , Datei5 (Punkt (1,1), file6 (Punkt (1,1), file7 (Punkt (1,1), file8 (Punkt (1,1)]

Und so dann,

Recht Jetzt habe ich folgende Probleme ... vor allem greift der Code nicht auf die Dateien zu, die ständig 0.0, 0.0, 0.0, ... 0.0 ausgeben, zweitens weiß ich nicht, wie ich sie erstellen soll der Ausgang (x, y) .txt

Jeder Dateieingang hat 1.050.622 Punkte ... also ist es notwendig, 1.050.622 Ausgänge zu erstellen ...

Jemand könnte mir helfen?

dies ist der Code, den ich schrieb:

package filtros; 
import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.io.FileWriter; 
import java.io.PrintWriter; 
import java.util.Scanner; 

public class Main { 

private static final String INPUT_FILE = ""; 
private static final String OUTPUT_FILE = ""; 

public static void main(String[] args) { 
    int n=1050622; 
    float datos[][] = new float[n][8]; 




    Scanner sc1,sc2,sc3,sc4,sc5,sc6,sc7,sc8; 
    try { 
     sc1 = new Scanner(new File("C:\\Users\\Netbook\\f1.txt")); 
     sc2 = new Scanner(new File("C:\\Users\\Netbook\\f2.txt")); 
     sc3 = new Scanner(new File("C:\\Users\\Netbook\\f3.txt")); 
     sc4 = new Scanner(new File("C:\\Users\\Netbook\\f4.txt")); 
     sc5 = new Scanner(new File("C:\\Users\\Netbook\\f5.txt")); 
     sc6 = new Scanner(new File("C:\\Users\\Netbook\\f6.txt")); 
     sc7 = new Scanner(new File("C:\\Users\\Netbook\\f7.txt")); 
     sc8 = new Scanner(new File("C:\\Users\\Netbook\\f8.txt")); 



     for(int i=0;i<n;i++){ 

      while (sc1.hasNextFloat()) { 
       datos[i][0] = sc1.nextFloat(); 

      } 

      while (sc2.hasNextFloat()) { 
       datos[i][1] = sc2.nextFloat(); 

      } 

      while (sc3.hasNextFloat()) { 
       datos[i][2] = sc3.nextFloat(); 

      } 

      while (sc4.hasNextFloat()) { 
       datos[i][3] = sc4.nextFloat();     
      } 

      while (sc5.hasNextFloat()) { 
       datos[i][4] = sc5.nextFloat();     
      } 

      while (sc6.hasNextFloat()) { 
       datos[i][5] = sc6.nextFloat();     
      } 

      while (sc7.hasNextFloat()) { 
       datos[i][6] = sc7.nextFloat();     
      } 

      while (sc8.hasNextFloat()) { 
       datos[i][7] = sc8.nextFloat();     
      } 

     } 

     for(int i=0;i<n;i++){ 
      System.out.print("espectro "+ i+ " "); 
      for(int j=0;j<8;j++){ 
       System.out.print(datos[i][j] + " "); 
       //float datos[i] = new FileWriter("C:\\Users\\Netbook\\Exits"); 
      } 
      System.out.println(); 
     } 


    } catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 


} 

} hinter Ihnen

+1

Bitte schreiben Sie eine spezifische Frage zu einem bestimmten Fehler, den Sie erhalten, und zeigen Sie auf die genaue Zeile im Code, wo Sie Hilfe benötigen. –

+0

Als erstes möchten Sie alle 'while (sC# .hasNextFloat())' zu 'if (sC# .hasNextFloat())' ändern. Weil Sie gerade alle Floats in den Dateien während der ersten Iteration Ihrer for-Schleife gelesen haben, daher das Ergebnis von 0.0 (glaube ich). –

+0

Ich brauche Hilfe überall, wo ich denke, XD ... also wenn jemand eine bessere Lösung schreiben kann, werde ich so zufrieden sein <3 –

Antwort

1

Ich denke, der Grund, warum immer "0.0" die ganze Zeit ist, dass Sie

while (sc1.hasNextFloat()) 

verwenden

, die Sie macht Lesen Sie während der ersten Iteration der for-Schleife alle Gleitkommazahlen in jeder der Dateien. Wenn Sie if anstelle von while verwenden, sollten Sie das gewünschte Verhalten erhalten.

Wie für die Dateien zu schreiben würde ich vorschlagen, einen FileWriter und den Code mit etwas würde wie folgt aussehen:

FileWriter fw; 
for(int i=0;i<n;i++){ 
    fw = new FileWriter(new File("C:\\Users\\Netbook\\Exits\\output" + i + ".txt")); 
    for(int j=0;j<8;j++){ 
     fw.write(datos[i][j] + " "); 
    } 
    fw.flush(); 
    fw.close(); 
} 

Denken Sie auch daran eine catch-Anweisung für die mögliche IOException hinzuzufügen.