2016-06-17 3 views
1

なぜ新しいファイルを作成できないのですか?パスが正しくないことが原因であるかどうか、またそうでない場合は問題が私のサーバーにあるのだろうかと思います。新しいファイルを作成できないのはなぜですか、パスまたはパス名の区切り記号が正しいのですか?

私のコード:

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; 
} 

私は、パスを記述するために、特にどのように、作成したファイルについて混乱しています:以下

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); 

とは、セパレーターのための方法のコードです。

は今、私は右のそれは例外が一度コンソールに印刷された例外によってシャットダウンしかし

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

の下

file.createNewFile(); 

を追加するが、それはもう印刷されていなかった、とファイルがまだあります重複して作成されていません。 新しいサーバーをTomcatに再デプロイする前のコードは正しいので、@maskacovnikの回答から情報を得たので、ファイルがどのように作成されたのか分かりません。

======== ========================================== ======= 問題は、myConstants.REPORT_PATHが指しているパスが間違っていることが原因であることが判明しています。私が示すコードは問題ありません。しかし、ファイルがどのようにあるのかはまだ分かりません。何

file.createNewFile(); 
+0

これは私の同僚のコードです。彼はここでは働いていません。このコードに割り当てられるのは新しいですが、なぜファイルが作成できないのかわかりません。 – daxue

+0

例外がなければ助けません。 。表示される場合は、ログを追加します。例外がない場合は作成する必要があるので、奇妙です。 – maskacovnik

答えて

1

ないあなたはFileオブジェクトを作成した場合:

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

ファイルを物理的に作成しないので、file.exists()falseを返します。これはJavaオブジェクトです。

空のファイルを使用し作成するには:

file.createNewFile(); 

をそれともで書くためにいくつかのストリームを使用します。また、新しいファイルを作成する権限があることを確認してください。

パスに問題がある場合は、パスに\の代わりに/を使用することをお勧めします。 Windowsマシンはそれをうまく解釈できます。 File.separatorが最適です - プラットフォームに依存しないでください。

私の意見では、パスは大丈夫です。物理的にファイルを作成していないだけです。

+0

は正しいパスですか? – daxue

+0

はい、私がfile.createNewFile()の行を追加すると、 '\ home \ www \ MyServer \ report \ my_log \ jo \'フォルダが@Jolee – maskacovnik

+0

に存在するかどうかを確認してください。それは例外になる。 – daxue

関連する問題