为什么无法创建新文件,路径或路径名分隔符是否正确?
Why cannot create new file,is the path or the pathname separator correct?
为什么我无法创建新文件,我想知道是不是因为路径不正确,如果不是,可能是我服务器的问题。
我的代码:
String signaturePath = pathService.getStringByKey(myConstants.REPORT_PATH) + File.separator + "hos_log" + File.separator + params.get("driver");
System.out.println(signaturePath);//it print this: /home/www/MyServer/report/\my_log\jo
String fileName = shortDate + ".jpg";
File file = new File(signaturePath + File.separator + fileName);//file debuged out : \home\www\MyServer\report\my_log\jo160601.jpg
dataMap.put("shortDate", shortDate);
dataMap.put("driverId", driverLog.getUserId());
if (file.exists()) {//false.and i go to the sever,there is no such file created.
dataMap.put("icon", "yes");
}else{
dataMap.put("icon", "no");
}
results.add(dataMap);
下面是分隔符的代码:
public static final String separator = "" + separatorChar;
public static final char separatorChar = fs.getSeparator();
public char getSeparator() {
return slash;
}
class Win32FileSystem extends FileSystem {
private final char slash;
private final char altSlash;
private final char semicolon;
public Win32FileSystem() {
slash = ((String) AccessController.doPrivileged(
new GetPropertyAction("file.separator"))).charAt(0);
semicolon = ((String) AccessController.doPrivileged(
new GetPropertyAction("path.separator"))).charAt(0);
altSlash = (this.slash == '\') ? '/' : '\';
}
private boolean isSlash(char c) {
return (c == '\') || (c == '/');
}
private boolean isLetter(char c) {
return ((c >= 'a') && (c <= 'z')) || ((c >= 'A') && (c <= 'Z'));
}
private String slashify(String p) {
if ((p.length() > 0) && (p.charAt(0) != slash)) return slash + p;
else return p;
}
我对文件的创建很困惑,尤其是路径怎么写。
现在我添加
file.createNewFile();
正下方
File file = new File(signaturePath + File.separator + fileName);
但是它被异常关闭了,异常在控制台打印了一次,但它不再打印了,并且文件仍然没有在服务器中创建。
我们将新服务器重新部署到 Tomcat 之前的代码是正确的,所以我不知道文件是如何物理创建的,因为我从@maskacovnik
的回答中获得了信息
============================================= ====================
结果是因为 myConstants.REPORT_PATH 指向的路径是错误的,我显示的代码是没有 issue.but 即使没有 [=15] 我仍然对它如何有文件感到困惑=]
file.createNewFile();
如果创建文件对象:
File file = new File(signaturePath + File.separator + fileName);
您不会创建物理文件,这就是为什么 file.exists()
returns false
,这只是 java 对象。
要创建空文件,请使用:
file.createNewFile();
或者用一些流写进去。还要确保您有权创建新文件。
如果路径不好,最好在路径中使用 /
而不是 \
。 Windows 机器可以很好地解释它。您的 File.separator
是最佳选择 - 它应该与平台无关。
我认为路径没问题,只是你还没有创建物理文件。
为什么我无法创建新文件,我想知道是不是因为路径不正确,如果不是,可能是我服务器的问题。
我的代码:
String signaturePath = pathService.getStringByKey(myConstants.REPORT_PATH) + File.separator + "hos_log" + File.separator + params.get("driver");
System.out.println(signaturePath);//it print this: /home/www/MyServer/report/\my_log\jo
String fileName = shortDate + ".jpg";
File file = new File(signaturePath + File.separator + fileName);//file debuged out : \home\www\MyServer\report\my_log\jo160601.jpg
dataMap.put("shortDate", shortDate);
dataMap.put("driverId", driverLog.getUserId());
if (file.exists()) {//false.and i go to the sever,there is no such file created.
dataMap.put("icon", "yes");
}else{
dataMap.put("icon", "no");
}
results.add(dataMap);
下面是分隔符的代码:
public static final String separator = "" + separatorChar;
public static final char separatorChar = fs.getSeparator();
public char getSeparator() {
return slash;
}
class Win32FileSystem extends FileSystem {
private final char slash;
private final char altSlash;
private final char semicolon;
public Win32FileSystem() {
slash = ((String) AccessController.doPrivileged(
new GetPropertyAction("file.separator"))).charAt(0);
semicolon = ((String) AccessController.doPrivileged(
new GetPropertyAction("path.separator"))).charAt(0);
altSlash = (this.slash == '\') ? '/' : '\';
}
private boolean isSlash(char c) {
return (c == '\') || (c == '/');
}
private boolean isLetter(char c) {
return ((c >= 'a') && (c <= 'z')) || ((c >= 'A') && (c <= 'Z'));
}
private String slashify(String p) {
if ((p.length() > 0) && (p.charAt(0) != slash)) return slash + p;
else return p;
}
我对文件的创建很困惑,尤其是路径怎么写。
现在我添加
file.createNewFile();
正下方
File file = new File(signaturePath + File.separator + fileName);
但是它被异常关闭了,异常在控制台打印了一次,但它不再打印了,并且文件仍然没有在服务器中创建。 我们将新服务器重新部署到 Tomcat 之前的代码是正确的,所以我不知道文件是如何物理创建的,因为我从@maskacovnik
的回答中获得了信息============================================= ==================== 结果是因为 myConstants.REPORT_PATH 指向的路径是错误的,我显示的代码是没有 issue.but 即使没有 [=15] 我仍然对它如何有文件感到困惑=]
file.createNewFile();
如果创建文件对象:
File file = new File(signaturePath + File.separator + fileName);
您不会创建物理文件,这就是为什么 file.exists()
returns false
,这只是 java 对象。
要创建空文件,请使用:
file.createNewFile();
或者用一些流写进去。还要确保您有权创建新文件。
如果路径不好,最好在路径中使用 /
而不是 \
。 Windows 机器可以很好地解释它。您的 File.separator
是最佳选择 - 它应该与平台无关。
我认为路径没问题,只是你还没有创建物理文件。