2016-06-17 41 views
1

爲什麼我不能創建一個新文件,我不知道是否因爲路徑不正確,如果沒有,也許問題出在我的服務器上。爲什麼不能創建新文件,路徑或路徑名分隔符是否正確?

我的代碼:下面

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\jo\20160601.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 file = new File(signaturePath + File.separator + fileName); 

但它關閉一個異常異常在控制檯打印一次加

file.createNewFile(); 

,但它沒有再印,文件仍不是以重創的方式創造的。我們重新部署新的服務器到Tomcat之前 的代碼是正確的,所以我不知道如何文件創建物理,因爲我有從@maskacovnik

答案獲得信息======== ================================================== ======= 這個問題證明,這是因爲myConstants.REPORT_PATH指向的路徑是錯誤的,我顯示的代碼是沒有問題的。但是我仍然對它是如何擁有一個文件感到困惑,即使有沒有

file.createNewFile(); 
+0

這是我的同事的代碼,他不在這裏工作,我是新的被分配到這個代碼,不知道爲什麼存在的問題,不能創建文件 – daxue

+0

如果沒有例外,我不能幫你。如果出現,請附加日誌。這很奇怪,因爲如果沒有例外,它應該被創建。 – maskacovnik

回答

1

如果您創建一個文件對象:

File file = new File(signaturePath + File.separator + fileName); 

你不會創建一個文件physicaly,這就是爲什麼file.exists()返回false,這只是java對象。

創建空文件,請使用:

file.createNewFile(); 

或者使用一些流在它來寫。另外請確保您有權創建新文件。

如果路徑不好,最好在路徑中使用/而不是\。 Windows機器可以很好地解釋它。您的File.separator是最好的選擇 - 它應該是平臺獨立的。

在我看來,路徑沒問題,你只是沒有創建文件physicaly。

+0

是正確的路徑嗎? – daxue

+0

是的,請確定是否存在'\ home \ www \ MyServer \ report \ my_log \ jo \'文件夾@JOLee – maskacovnik

+0

當我添加一行file.createNewFile();它來到一個例外。 – daxue

相關問題