前言:在开发过程中,可能会遇写文件的问题。当我们写文件时,文件名中可能会带“*”号。这时候可能会导致写文件失败。
比如有一段写文件的代码:
public static void createFile(String filename, byte[] content) {
FileOutputStream fos = null;
try {
File file = new File(filename);
File path = file.getParentFile();
if(!path.exists()) {
path.mkdirs();
}
if(file.exists()) {
file.delete();
}
file.createNewFile();
fos = new FileOutputStream(file);
fos.write(content,0,content.length);
fos.flush();
} catch (IOException e) {
// IGNORE
} finally {
if(fos != null) {
try {
fos.close();
} catch (IOException e) {
// IGNORE
}
}
}
}
这时候我们需要写文件,传入的文件名为:12138232.mp3.**
这时候就会出现无法写文件的错误,我们可以把“*”号换成别的没有特殊含义的符号,比如:“x”就能成功生成文件。
这是为什么呢?
在Java中,文件名中带有特殊字符,如、?、:、"、\、/、|、<、>等,可能会导致文件写入失败。这是因为这些字符在文件系统中被视为保留字符或具有特殊含义的字符,不能直接用于文件名。*
不同的文件系统对文件名的限制可能有所不同,但通常遵循一些常见的规则和限制。例如,Windows文件系统(如NTFS)不允许文件名中包含*和?等字符,而Unix/Linux文件系统(如ext4)对这些字符没有限制,但可能会对其他特殊字符施加限制。
为了避免文件写入失败,你可以采取以下措施:
1.避免使用保留字符:确保文件名中不包含特殊字符,特别是文件系统中被视为保留字符的字符。可以使用字母、数字、下划线和破折号等常规字符组成文件名。
2.进行字符转义或替换:如果需要包含特殊字符,可以考虑将其进行转义或替换。例如,将*替换为其他字符或删除它。
3.使用合法的文件名:了解目标文件系统的文件命名规则,并确保使用合法的文件名。不同的文件系统可能对文件名的长度、字符集和特殊字符有不同的限制。