Java程序从文本文件中读取输入并相应地修改它

Java程序从文本文件中读取输入并相应地修改它,java,string,file-io,Java,String,File Io,我正在编写一个Java程序,它输入一个测试文件,对数据执行一些修改,然后将其写入一个新的文件输出 输入文本文件如下所示 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 fo

我正在编写一个Java程序,它输入一个测试文件,对数据执行一些修改,然后将其写入一个新的文件输出

输入文本文件如下所示

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
程序需要能够将采样器更改为44100,通道更改为1,如果它们还没有这些值。我还将完全删除url和名称片段。在这些更改之后,需要将新行写入不同的输出文本文件

到目前为止,我的程序所能做的就是选择一个文件并向用户显示该文件的内容。有人能给我指出我的程序应该如何工作的正确方向吗 以达到我所要求的结果

正如有人问的,这就是我目前所拥有的

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());
        }
    }
}

}

你需要这样做

  • 一次读取一行文件的内容
  • 将行拆分为各个组件,例如在“空格”字符上拆分
  • 根据您的问题更改采样率和通道值
  • 将该行写入文件,然后从步骤1重新开始

  • 如果您尝试一下,请在StackExchange上发布一些有问题的代码,我们将尽力提供帮助。

    您需要执行类似的操作

  • 一次读取一行文件的内容
  • 将行拆分为各个组件,例如在“空格”字符上拆分
  • 根据您的问题更改采样率和通道值
  • 将该行写入文件,然后从步骤1重新开始
  • 如果您尝试一下,请在StackExchange上发布一些有问题的代码,我们将尽力提供帮助。

    您能试试吗

            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);
    
    参考:你能试试吗

            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:

    你试过什么?如果您已经可以读取该文件,那么您应该能够读取所需的部分并将其写入输出文件。向我们展示打开该文件并读取其内容的代码。为什么不使用正则表达式将所有“samplerate”替换为44100,而不管其值如何。您可以在读取文件时执行此操作。。。然后简单地写下输出。我已经把我正在使用的代码放到了问题中,你尝试了什么?如果您已经可以读取该文件,那么您应该能够读取所需的部分并将其写入输出文件。向我们展示打开该文件并读取其内容的代码。为什么不使用正则表达式将所有“samplerate”替换为44100,而不管其值如何。您可以在读取文件时执行此操作。。。然后简单地写输出。我已经把我正在使用的代码放到问题中了。编写这些replaceAll的更好方法是使用捕获组:
    line.replaceAll((samplerate\\s*=\\s*)\\d+,“$144100”)
    编写这些replaceAll的更好方法是使用捕获组:
    line.replaceAll((samplerate\\s*=\\s*)\\d+,“$144100”)
    不必为教育性答案费心,总有人过来把它全部拼出来:)不必为教育性答案费心,总有人过来把它全部拼出来:)