文件复制至其他位置触发InvalidPathException的原因及解决方法
问题分析与解决方法
错误原因
你的代码触发InvalidPathException的核心原因是:Windows系统文件名不允许包含冒号(:)。你用"dd-M-yyyy hh:mm:ss"格式生成日期字符串,导致目标文件名里出现了冒号,违反了Windows的文件命名规则。另外目标文件路径开头还有个多余空格,也会干扰路径识别。
修复方案
- 修改日期格式化规则,把时间部分的冒号替换为Windows允许的字符(如下划线
_) - 移除目标路径开头的多余空格
- (可选)遵循Java变量命名规范,将大写开头的
Date改为小写date
修改后的代码示例
public void Copy() { try { // 将时间格式中的冒号替换为下划线,避免非法字符 String date = new SimpleDateFormat("dd-M-yyyy hh_mm_ss").format(new Date()); File sourceFile = new File("D:\\DOFN Materials\\App\\LMSystem\\LMSystem.sqlite"); // db path // 移除路径开头的多余空格 File destinationFile = new File("D:\\DOFN Materials\\App\\LMSystem\\Copy\\back"+date+"_"+"LMSystem"); Files.copy(sourceFile.toPath(), destinationFile.toPath(), StandardCopyOption.REPLACE_EXISTING); System.out.println("file is copied"); JOptionPane.showMessageDialog(null, date + " Copy Successfully !!"); } catch (IOException ex) { Logger.getLogger(About.class.getName()).log(Level.SEVERE, null, ex); } }
额外注意事项
Windows系统文件名禁止使用的字符包括:< > : " / \ | ? *,生成动态文件名时必须确保避开这些字符。
内容的提问来源于stack exchange,提问作者Zshanax Cag
相关产品推荐
相关产品推荐

