我试图创建一个程序来读取包含大量文本的文本文件,使用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();
}
}
答案 0 :(得分:2)
您将其指定为分隔符:
Dummy.useDelimiter("\\s[<wpt]\\s|\\s[</wpt>]\\s");
因此,扫描程序会查找由" <wpt </wpt> "
分隔的标记
这不是你想要的。
你有一些<wpt
&#34;标签&#34;并且您想要检索每个<wpt>
标记的内容。
您可以使用GPX解析器或通过使用BufferedReader
读取文件来手动解析。
自己动手处理一种tag
非常直接
您在缓冲区中读取文件内容,一旦检测到"<wpt" String
,就会创建一个新对象,然后继续读取该文件以评估该对象的状态,并为下一个对象执行相同的操作。遇到:"<wpt" String
,等等......