2012-04-12 3 views
0

Ich schreibe ein Java-Programm, das eine Testdatei eingibt, einige Änderungen an den Daten vornimmt und sie dann in eine neue Dateiausgabe schreibt.Java Programm liest die Eingabe aus einer Textdatei und ändert sie entsprechend

Die Eingabetextdatei sieht wie folgt aus ...

url = http://184.154.145.114:8013/wlraac name = wlr samplerate = 44100 channels =2 format = S16le~ 
url = http://newstalk.fmstreams.com:8080 name = newstalk samplerate = 22050 channels = 1 format = S16le 

Das Programm muss die Samplerate auf 44100 und die Kanäle auf 1 ändern, wenn sie nicht bereits diese Werte haben tun können. Ich würde auch die URL entfernen und Teile komplett benennen. Nach diesen Änderungen muss die neue Zeile in eine andere Ausgabetextdatei geschrieben werden.

Bisher kann mein Programm nur eine Datei auswählen und den Inhalt der Datei für den Benutzer anzeigen. Könnte jemand bitte zeigen Sie mir in die richtige Richtung für wie mein Programm arbeiten sollte, um mein erforderliches Ergebnis zu erreichen.

Als jemand hier gefragt ist, was ich habe bisher

import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileReader; 

import javax.swing.JFileChooser; 
import javax.swing.JFrame; 

public class reader2 { 
public reader2() { 
} 
public static void main(String[] args) { 
    reader(args); 

} 
public static void reader(String[] args) { 

    JFileChooser chooser = new JFileChooser(); 
    chooser.setCurrentDirectory(new File(".")); 

    chooser.setFileFilter(new javax.swing.filechooser.FileFilter() { 
     public boolean accept(File f) { 
      return f.getName().toLowerCase().endsWith(".txt") 
      || f.isDirectory(); 
     } 

     public String getDescription() { 
      return "Text Documents (.txt)"; 
     } 
    }); 

    int r = chooser.showOpenDialog(new JFrame()); 
    if (r == JFileChooser.APPROVE_OPTION) { 
     String name = chooser.getSelectedFile().getName(); 
     String pathToFIle = chooser.getSelectedFile().getPath(); 
     System.out.println(name); 
     try{ 
      BufferedReader reader = new BufferedReader(new FileReader(pathToFIle)); //Setup the reader 

      while (reader.ready()) { //While there are content left to read 
       String line = reader.readLine(); //Read the next line from the file 
       String[] tokens = line.split("url = "); //Split the string at every @ character. Place the results in an array. 

       for (String token : tokens){ //Iterate through all of the found results 

         //System.out.println(token); 
         System.out.println(token); 
        } 

      } 

      reader.close(); //Stop using the resource 
     }catch (Exception e){//Catch exception if any 
      System.err.println("Error: " + e.getMessage()); 
     } 
    } 
} 

} 
+0

Was haben Sie versucht? Wenn Sie die Datei bereits lesen können, sollten Sie in der Lage sein, die gewünschten Teile zu lesen und in die Ausgabedatei zu schreiben. – jzworkman

+1

Zeigen Sie uns Ihren Code, der die Datei öffnet und den Inhalt liest. –

+0

Warum ersetzen Sie nicht einfach alle "Samplerate" durch 44100 mit einer Regex, unabhängig von ihrem Wert. Sie können dies tun, während Sie die Datei lesen ... und dann einfach die Ausgabe schreiben. – radimpe

Antwort

3

Sie werden so etwas wie dies tun müssen, ...

  1. den Inhalt der Datei lesen, eine Zeile zu einem Zeitpunkt,
  2. Teilen Sie die Zeile in die einzelnen Komponenten auf, z. B. durch Aufteilen auf das Leerzeichen.
  3. Ändern Sie die Abtastrate und Kanalwerte entsprechend Ihrer Frage
  4. Schreiben Sie die Zeile in eine Datei, und starten Sie erneut mit Schritt 1.

Wenn Sie diesen einen Versuch geben, einige Code auf Stack mit allen möglichen Problemen veröffentlichen und wir werden zu helfen versuchen.

+0

Keine Notwendigkeit, pädagogische Antworten zu stören, es gibt immer jemanden, der kommt und schreibt alles aus :) –

2

können Sie versuchen,

 File file = new File(fileName); 
     File tempFile = File.createTempFile("buffer", ".tmp"); 
     FileWriter fw = new FileWriter(tempFile); 

     Reader fr = new FileReader(file); 
     BufferedReader br = new BufferedReader(fr); 

     while(br.ready()) { 
      String line = br.readLine(); 
      String newLine = line.replaceAll("samplerate =\\s*\\d+", "samplerate = 44100"); 
      newLine = newLine.replaceAll("channels =\\s*\\d+", "channels = 1"); 

      fw.write(newLine + "\n"); 
     } 

     fw.close(); 
     br.close(); 
     fr.close(); 

     // Finally replace the original file. 
     tempFile.renameTo(file); 

Ref: Files java replacing characters

+0

Besserer Weg, diese replaceAlls zu schreiben ist mit Capture-Gruppen: 'line.replaceAll ("(Samplerate \\ s * = \\ s *) \\ d +", "$ 144100") ' –

Verwandte Themen