今天随手写了一个分隔小说章节的系统,突然出现了这个bug
java.io.FileNotFoundException: book\第27章我\说:“我吗?”.txt (系统找不到指定的路径。) 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 com.star.literature.SplitTextByChapter.saveChapterToFile(SplitTextByChapter.java:90) at com.star.literature.SplitTextByChapter.splitTextByChapter(SplitTextByChapter.java:38) at com.star.literature.SplitTextByChapter.main(SplitTextByChapter.java:12) java.io.FileNotFoundException: book\第459章固执j一(三*)2韭陾择了.txt (文件名、目录名或卷标语法不正确。) 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 com.star.literature.SplitTextByChapter.saveChapterToFile(SplitTextByChapter.java:90) at com.star.literature.SplitTextByChapter.splitTextByChapter(SplitTextByChapter.java:38) at com.star.literature.SplitTextByChapter.main(SplitTextByChapter.java:12)
这个问题是 Windows 文件系统对文件名的限制,和代码无关
Windows 不允许在文件名中使用以下字符:
\ / : * ? " < > |
解决方法就是把非法字符替换掉,比如
public static String sanitizeFileName(String name) {
// Windows 不允许的字符 \ / : * ? " < > |
return name.replaceAll("[\\\\/:*?\"<>|]", "_");
}即可。


