【问题标题】:Reading through a file, writing to another file with while loop读取文件,使用while循环写入另一个文件
【发布时间】:2017-07-31 11:11:39
【问题描述】:

我正在尝试制作一个程序,它可以读取包含大量文本的文本文件,使用 Scanner useDelimiter 函数拆分文本,然后将文本打印到另一个文件。

要读取的文件中的文本如下所示(虽然它要长得多):

" " 这些是 GPX 文件中的航路点。

我希望它在“”处分开,只要它读到另一个“

但是当我将它打印到另一个文本文件时,它只打印第一个航路点...

到目前为止,这是我的代码。我创建了一个虚拟文件来过滤掉原始文件中的元数据。程序应该从这个虚拟文件中读取。

public void openFile() {
    Chooser = new JFileChooser("C:\\Users\\danie\\Desktop\\");
    Chooser.setAcceptAllFileFilterUsed(false);
    Chooser.setDialogTitle("Open file");
    Chooser.addChoosableFileFilter(new FileNameExtensionFilter("*.gpx", "gpx"));
    Chooser.addChoosableFileFilter(new FileNameExtensionFilter("*.txt", "txt"));
    Chooser.addChoosableFileFilter(new FileNameExtensionFilter("*.csv", "csv"));
    int returnVal = Chooser.showOpenDialog(null);

    try {
        Dummy = new Scanner(Chooser.getSelectedFile());
    } catch (FileNotFoundException E) {
        System.out.println("Error: " + E);
    }
}

public void createFile() {
    Dummy.useDelimiter("<wpt");
    if (Dummy.hasNext()) {
        String Meta = Dummy.next();
    }
    Dummy.useDelimiter("\\s[<wpt]\\s|\\s[</wpt>]\\s");
    try {
        while (Dummy.hasNext()) {
            String Test = Dummy.next();
            DummyFile = new File("Dummy.txt");
            Output = new PrintWriter(DummyFile);
            Output.print(Test);
            Output.println();
            Output.flush();
            //Output.close();          
        }
        Input = new Scanner(DummyFile).useDelimiter("\\s<wpt\\s*");
        String Final = Input.next();
        boolean Done = false;
        while (Done != true) {
            TestFile = new File("C:\\Users\\danie\\Desktop\\Test.txt");
            Writer = new PrintWriter(TestFile);
            Writer.println(Final);
            Writer.flush();
            if (Input.hasNext()) {
                Done = true;
            }
        }
    } catch (FileNotFoundException EXE) {
        System.out.println("Error: " + EXE);
    }
    Dummy.close();
}
}

【问题讨论】:

    标签: java file java.util.scanner delimiter


    【解决方案1】:

    您将其指定为分隔符:

     Dummy.useDelimiter("\\s[<wpt]\\s|\\s[</wpt>]\\s");
    

    因此,扫描程序会查找由 " &lt;wpt &lt;/wpt&gt; " 分隔的令牌。
    这不是你想要的。
    您有一些 &lt;wpt“标签”,并且您想要检索每个 &lt;wpt&gt; 标签的内容。

    您可以使用 GPX 解析器或通过使用 BufferedReader 读取文件来手动进行解析。

    自己动手处理一种tag 真的很直接。
    您在缓冲区中读取文件内容,一旦检测到"&lt;wpt" String,您就会创建一个新对象并继续读取文件以评估该对象的状态,并且您对下一个遇到的情况执行相同的操作: "&lt;wpt" String,等等……

    【讨论】:

      猜你喜欢
      • 2018-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-17
      • 1970-01-01
      • 1970-01-01
      • 2012-10-22
      • 2021-01-23
      相关资源
      最近更新 更多