有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java文件的迭代读取

目前,我在为公司编写工具方面遇到了问题。我有384个XML文件,我必须用SAX解析器读取并解析为txt文件。 到目前为止,我得到的是将所有XML文件解析为一个txt文件,大小为43MB。带缓冲读取器和线路。startsWith我想从文本文件中提取所有相关信息

编辑:完成 (所以我的问题是如何更有效地解决这个问题。我有一个想法(但不幸的是,没有你想象的代码),但我不知道这是否可能:我想迭代一个目录,找到我想要的XML文件,然后解析它,并用解析后的内容创建一个新的txt文件。如果对所有384个XML文件都这样做,我希望对384个txt文件也这样做,请使用BufferedReader读取它们以获取相关信息。一次读一本很重要。另一个问题是目录路径,它有点复杂:“C:\Users\xxx\Documents\Data\ProjectName\A1\1\1SLin\want.xml”每个文件都有自己的目录。变量为A1,从A-P到1-24。或者,我在arraylist中有三个绝对路径的所有相关文件,因此,如果比较容易的话,也可以迭代此列表。)

编辑: 我找到了一个解决方案:下面包含search directories方法和一个将列表中的xml文件解析到具有相同文件名但具有另一个文件扩展名的同一目录中的方法

public List<File> searchFile(File dir, String find) {

    File[] files = dir.listFiles();
    List<File> matches = new ArrayList<File>();
    if (files != null) {
        for (int i = 0; i < files.length; i++) {
            if (files[i].isDirectory()) {
                matches.addAll(searchFile(files[i], find));
            } else if (files[i].getName().equalsIgnoreCase(find)) {
                matches.add(files[i]);
            }
        }
    }
    Collections.sort(matches);
    return matches;

}

public static void main(String[] args) throws IOException {

    Import_Files im = new Import_Files();
    File dir = new File("C:\\Users\\xxx\\Desktop\\MS-Daten\\");
    String name = "snp_result_5815.xml";
    List<File> matches = im.searchFile(dir, name);
    System.out.println(matches);

    for (int i=0; i<matches.size(); i++) {
        String j = String.valueOf(i);
        String xml_name = matches.get(i).getAbsolutePath();
        File f = new File(matches.get(i).getAbsolutePath().replaceFirst(".xml", ".txt"));
        System.setOut(new PrintStream(new FileOutputStream(f)));

        System.out.println("\nstarting File: "+ i + "\n");
        xml_parse myReader = new xml_parse(xml_name);
        myReader.setContentHandler(new MyContentHandler());
        myReader.setErrorHandler(new MyErrorHandler());
        myReader.run();
    }

}

共 (1) 个答案

  1. # 1 楼答案

    下面的searchFolder方法将采用路径和文件扩展名,搜索路径和所有子目录,并将任何匹配的文件类型传递给processFile方法

    public static void main(String[] args) {
        String path = "c:\\temp";
        Pattern filePattern = Pattern.compile("(?i).*\\.xml$");
        searchFolder(path, filePattern);
    }
    
    public static void searchFolder(String searchPath, Pattern filePattern){
        File dir = new File(searchPath);
        for(File item : dir.listFiles()){
            if(item.isDirectory()){
                //recursively search subdirectories
                searchFolder(item.getAbsolutePath(), filePattern);
            } else if(item.isFile() && filePattern.matcher(item.getName()).matches()){
                processFile(item);
            }
        }
    }
    
    public static void processFile(File aFile){
        String filename = aFile.getAbsolutePath();
        String txtFilename = filename.substring(0, filename.lastIndexOf(".")) + ".txt";
        //Do your xml file parsing and write to txtFilename
    }
    

    路径的复杂性没有区别,只需指定要搜索的根路径(在您的情况下看起来像C:\Users\xxx\Documents\Data\ProjectName),它就会找到所有文件