我试图解析一些链接,然后将信息存储在文本文件中,我有所有应该在列表中解析的链接,但是在解析和存储了关于100个链接的信息之后,我真的无法理解为什么会发生错误,下面是我的代码:
for(String link : links){
Document doc = Jsoup.connect(link).get();
Element e1 = doc.select("h1").first();
String authorName = e1.ownText();
String fileName = authorName.replaceAll("\\s+","");
PrintWriter writer = new PrintWriter("/home/taner/Test/"+fileName+".txt", "UTF-8");
String description = doc.getElementsByClass("article__content").text();
writer.write(description);
writer.close();
}这就是我所犯的错误:
Exception in thread "main" java.io.FileNotFoundException: /home/taner/Test/MarcusSchmidt/JohannaDrott.txt (No such file or directory)
at java.io.FileOutputStream.open0(Native Method)
at java.io.FileOutputStream.open(FileOutputStream.java:270)
at java.io.FileOutputStream.<init>(FileOutputStream.java:213)
at java.io.FileOutputStream.<init>(FileOutputStream.java:162)
at java.io.PrintWriter.<init>(PrintWriter.java:192)
at java.io.PrintWriter.<init>(PrintWriter.java:232)
at Test1.main(Test1.java:253)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)第253行实际上是PrintWriter writer = new PrintWriter("/home/taner/Test/"+fileName+".txt", "UTF-8");行
发布于 2016-02-03 13:32:28
您正在将authorName转换为文件名,没有任何引用。当authorName包含一个斜线时会发生什么?=>,您的结构中有一个额外的目录。
请注意,Java接受Slash和反斜杠作为,因此必须同时替换两者。
这基本上就是在您的异常中发生的情况: authorName = "MarcusSchmidt/JohannaDrott",这将导致一个新的子目录"MarcusSchmidt",该子目录不存在。
另一个问题是,如果两个页面具有相同的authorName,那么文件将被覆盖。
通常,在将值从不受控制的源(如Internet )转换为系统资源时,您应该小心,因为这会打开代码的漏洞。
发布于 2016-02-03 13:29:17
您需要首先创建文件(和目录):
final File file = new File("/home/taner/Test/" + fileName + ".txt");
file.mkdirs();
file.createNewFile();发布于 2016-02-03 13:29:37
检查是否具有以下目录结构:/home/taner/Test/MarcusSchmidt/。您的fileName字符串似乎是MarcusSchmidt/JohannaDrott.txt,而不仅仅是JohannaDrott.txt。
https://stackoverflow.com/questions/35178307
复制相似问题