我有一个HTML帮助系统,我需要转换为SharePoint。两个最耗时的项目是更改文档链接和收集元数据。但是,我很幸运,因为这些数据很容易获取。每个文件都是HTML文档,过度简化如下:
<body>
<!--- Metadata follows
Procedure Name: my document
Procedure Number: xxxxx
Use: freeform text explaining when procdure is used
Revision Date: xx/xx/xx
By: responsible party for revision
<!--- end metadata
<h1>Procedure Name<\h1>
<p>procedure background and narrative, with links, as needed, to other documents at \\documentation-server\path\document-name.html
<\body>
我可以成功提取&amp;操纵正确的字符串,我正在尝试将该过程合并到自动化解决方案中。因为这是我第一次进入文件i / o,但是我对下一步做什么有点模糊。
在一个完美的世界中,给定一条路径,我想逐步浏览路径中的每个* .html文件。我似乎无法找到一个类/方法来做到这一点。 newInputStream
和newOutpuStream
为我提供了文件访问权限,但我需要提供一个路径&amp;文件参数。 FileVisitor
接口出现,仅交互文件属性并执行删除/复制/重命名类型功能。
是否有一个soemthing将这些组合成一个单独的函数,它将遍历路径中的每个文件,打开它并允许我逐行解析,然后关闭文件并移动到下一个重复?
我的另一个想法是创建一个文件名数组,然后将该数组提供给newInputStream
的文件名参数。
连连呢?
答案 0 :(得分:1)
如果使用Java 7,FileVisitor界面使您可以非常轻松地遍历文件树。例如,请参阅Java Tutorial。
您可以覆盖visitFile
方法以对文件执行所需操作,例如(未测试):
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attr) {
if (attr.isRegularFile() && file.getFileName().toString().endsWith(".html")) {
Charset charset = Charset.forName("UTF-16");
try (BufferedReader reader = Files.newBufferedReader(file, charset)) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line); //do what you need to do here
}
} catch (IOException x) {
//Print / log the errror
}
}
return CONTINUE;
}
答案 1 :(得分:1)
java.io.File file = new File("yourPath");
if(file.isDirectory())
for(File f : file.listFiles(new YourFileFilter()))
doYourReading(new FileInputStream(f));
和
class YourFileFilter extends java.io.FileFilter{
public boolean accept(File pathname) {
return pathname.getName().toLowerCase().endsWith(".html");
}
}
这至少是基本的想法。异常处理在你身上(;
答案 2 :(得分:1)
你需要html解析器 - http://htmlparser.sourceforge.net/。然后链接每个文档,它将执行您想要做的事情。
答案 3 :(得分:1)
它可能看起来有点违反直觉,但java中的File
对象也代表目录。
您可以通过执行以下操作来检查它是否是目录:
file.isDirectory()
如果是,您可以列出所有文件并相应地处理它们:
for(File f : file.listFiles()){
handle(f);
}