Java:迭代目录中的HTML文件

时间:2012-08-18 09:28:51

标签: java xslt iteration transformation jaxp

我正在将HTML文件和一个XSLT文件作为输入并生成HTML输出但在我的文件夹中有多个HTML文件,我将把它们作为输入并生成相应的输出文件,同时保留XSLT输入文件每次都一样。目前在我的代码中我每次都重复代码块来获取输入HTML文件。而不是这个,我想迭代文件夹中的所有HTML文件,并逐个将它们作为输入文件生成输出。在我当前的代码文件中,名称也像part_1.html一样固定,但它可能会有所不同,在这种情况下,此代码将无法工作,这将产生问题。任何人都可以帮助解决这个问题: 谢谢你!

当前Java代码(两个文件的示例):

public void tranformation() {
        // TODO Auto-generated method stub
        transform1();
        transform2();
    }
    public static void transform1(){
        String inXML = "C:/SCORM_CP/part_1.html";
        String inXSL = "C:/source/xslt/html_new.xsl";
        String outTXT = "C:/SCORM_CP/part1_copy_copy.html";
        String renamedFile = "C:/SCORM_CP/part_1.html";
        File oldfile =new File(outTXT);
        File newfile =new File(renamedFile);
        HTML_Convert hc = new HTML_Convert();
        try {
            hc.transform(inXML,inXSL,outTXT);
            } catch(TransformerConfigurationException e) {
            System.err.println("Invalid factory configuration");
            System.err.println(e);
            } catch(TransformerException e) {
            System.err.println("Error during transformation");
            System.err.println(e);
        }
        try{
            File file = new File(inXML);
            if(file.delete()){
                System.out.println(file.getName() + " is deleted!");
                }else{
                System.out.println("Delete operation is failed.");
            }
            }catch(Exception e){
            e.printStackTrace();
        }
        if(oldfile.renameTo(newfile)){
            System.out.println("Rename succesful");
            }else{
            System.out.println("Rename failed");
        }
    }
    public static void transform2(){
        String inXML = "C:/SCORM_CP/part_2.html";
        String inXSL = "C:/source/xslt/html_new.xsl";
        String outTXT = "C:/SCORM_CP/part2_copy_copy.html";
        String renamedFile = "C:/SCORM_CP/part_2.html";
        File oldfile =new File(outTXT);
        File newfile =new File(renamedFile);
        HTML_Convert hc = new HTML_Convert();
        try {
            hc.transform(inXML,inXSL,outTXT);
            } catch(TransformerConfigurationException e) {
            System.err.println("Invalid factory configuration");
            System.err.println(e);
            } catch(TransformerException e) {
            System.err.println("Error during transformation");
            System.err.println(e);
        }
        try{
            File file = new File(inXML);
            if(file.delete()){
                System.out.println(file.getName() + " is deleted!");
                }else{
                System.out.println("Delete operation is failed.");
            }
            }catch(Exception e){
            e.printStackTrace();
        }
        if(oldfile.renameTo(newfile)){
            System.out.println("Rename succesful");
            }else{
            System.out.println("Rename failed");
        }
    }
    public void transform(String inXML,String inXSL,String outTXT)
    throws TransformerConfigurationException,
    TransformerException {
        TransformerFactory factory = TransformerFactory.newInstance();
        StreamSource xslStream = new StreamSource(inXSL);
        Transformer transformer = factory.newTransformer(xslStream);
        transformer.setErrorListener(new MyErrorListener());
        StreamSource in = new StreamSource(inXML);
        StreamResult out = new StreamResult(outTXT);
        transformer.transform(in,out);
        System.out.println("The generated XML file is:" + outTXT);
    }
}

4 个答案:

答案 0 :(得分:2)

File dir = new File("/path/to/dir");
File[] htmlFiles = dir.listFiles(new FilenameFilter() {
    @Override
    public boolean accept(File dir, String name) {
        return name.endsWith(".html");
    }
});
if (htmlFiles != null) for (File html: htmlFiles) {
    ...
}

答案 1 :(得分:1)

你必须实现像

这样的东西
public class Transformation {

  public static void main (String[] args){
    transformation(".", ".");
  }

  public static void transform(String inXML, String inXSL, String outTXT, String renamedFile){
    System.out.println(inXML);
    System.out.println(inXSL);
    System.out.println(outTXT);
    System.out.println(renamedFile);
  }

  public static void transformation(String inFolder, String outFolder){
    File infolder = new File(inFolder);
    File outfolder = new File(outFolder);
    if (infolder.isDirectory() && outfolder.isDirectory()){
      System.out.println("In " + infolder.getAbsolutePath());
      System.out.println("Out " + outfolder.getAbsolutePath());
      File[] listOfFiles = infolder.listFiles();
      String outPath = outfolder.getAbsolutePath();
      String inPath = infolder.getAbsolutePath();
      for (File f: listOfFiles) {
        if (f.isFile() ) {
          System.out.println("File " + f.getName());
          int indDot = f.getName().lastIndexOf(".");
          String name = f.getName().substring(0, indDot);
          String ext = f.getName().substring(indDot+1);
          if (ext != null && ext.equals("html")){
            transform(f.getAbsolutePath(), inPath+File.separator+name+".xsl", outPath+File.separator+name+".txt", outPath+File.separator+name+".html");

          }
        }
      }       
    }
  }
}

答案 2 :(得分:1)

首先,您应该编写一个以inXMLinXSLoutTXTrenamedFile作为参数的方法。

然后,使用list()类的File方法,最终使用FilenameFilter,您可以迭代要转换的文件。

以下是FilenameFilter的示例:

FilenameFilter filter = new FilenameFilter() {
    public boolean accept(File dir, String name) {
        return name.contains("part");
    }
};

此致

答案 3 :(得分:1)

使用DirectoryScanner,这将使您的工作更轻松

Example of usage:

   String[] includes = {"**\*.html"};
   ds.setIncludes(includes);
   ds.setBasedir(new File("test"));
   ds.setCaseSensitive(true);
   ds.scan();

   System.out.println("FILES:");
   String[] files = ds.getIncludedFiles();
   for (int i = 0; i < files.length; i++) {
     System.out.println(files[i]);
   }

http://plexus.codehaus.org/plexus-utils/apidocs/org/codehaus/plexus/util/DirectoryScanner.html