读取文件,使用while循环写入另一个文件

时间:2017-07-31 11:11:40

标签: java file java.util.scanner delimiter

我试图创建一个程序来读取包含大量文本的文本文件,使用Scanner useDelimiter函数拆分文本,然后将文本打印到另一个文件。

要读取的文件中的文本看起来像这样(虽然它要长得多):

"< wpt sometext> < desc sometext< / DSC> < / WPT>< wpt sometext> < desc sometext< / DSC> < / WPT>"这些是GPX文件中的航点。

我想把它分开在"< / WPT>"只要它读到另一个"

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

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

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

1 个答案:

答案 0 :(得分:2)

您将其指定为分隔符:

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

因此,扫描程序会查找由" <wpt </wpt> "分隔的标记 这不是你想要的。
你有一些<wpt&#34;标签&#34;并且您想要检索每个<wpt>标记的内容。

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

自己动手处理一种tag非常直接 您在缓冲区中读取文件内容,一旦检测到"<wpt" String,就会创建一个新对象,然后继续读取该文件以评估该对象的状态,并为下一个对象执行相同的操作。遇到:"<wpt" String,等等......