2016-10-17 17 views
0

java.io.Fileから新しいファイルを作成しようとしましたが、その方法はcreateNewFile()で、偽(setWritable(true)mkdirs())を返します。JAVAの新しいファイルまたはディレクトリの作成で偽が返される

許可の問題ですか?この動作を変更するにはどうすればよいですか?

追加情報:

  • File.exists() trueを返します。

  • createNewFile()は例外をスローしません。

  • 私が実行しているユーザーには、ディレクトリにファイルを作成する権限がありますが、canWrite()はfalseを返します。

  • また、変更があればEclipseを使用しています。

+0

Java SE 7のドキュメントによれば、ファイルがすでに存在する場合にのみ、このメソッドはfalseを返します。それ以外の場合はioexceptionがスローされます。 – SOFe

+0

falseの返信は許可の問題ではありません。それは例外を通って起こるだろう。 – NightSkyCode

+1

あなたが直面した問題についてより多くのフィードバックを得たい場合は、Java 7で追加された 'Files.createFile'の使用を検討してください。また、http://java7fs.wikia.com/wiki/Why_File_sucksも参照してください。 – Pshemo

答えて

2

Javadocは、ファイルがまだ存在しない場合にのみ新しいファイルが作成されると言います。 File.exists()はtrueを返すので、ファイルが存在することを意味し、createNewFileはファイルが削除されるまで常にfalseを返します。 java.io.File この抽象パス名で指定された新しい空のファイルを、この名前のファイルがまだ存在しない場合に限り、原子的に作成します。一般的に

あなたがソフトウェアにアクセス許可の問題がある場合は、それに対処する推奨方法は、次のようになります。

  1. テストシェルからファイルを作成することができます。アクセス権を修正しない場合
  2. Java実行可能ファイルが独自のアクセス許可で実行されているかどうかを確認します(おそらく、SUIDフラグが設定されていますか?)。
  3. ファイルシステムへのアクセスを拒否するJAVAセキュリティポリシーが存在するかどうかを確認します。
関連する問題