いつもお世話になっております。
java.io.FileOutputStreamを使用して、Cドライブ直下にファイルを作成しようとしているのですが、以下のような例外が発生しました。
使用環境
OS: Windows 10
JRE: 8.0
ユーザー: Administratorsグループに所属するユーザー
Java
1//テスト用プログラム 2import java.io.FileNotFoundException; 3import java.io.IOException; 4 5public class Test { 6 7 public static void main(String[] args) { 8 String filename = "C:\ABCDEFGH"; 9 java.io.FileOutputStream fos = null; 10 11 String line = "abcdefg"; 12 13 try { 14 fos = new java.io.FileOutputStream(new java.io.File(filename)); 15 fos.write(line.getBytes()); 16 try { 17 if(fos != null){ 18 fos.flush(); 19 } 20 }catch(Exception e){ 21 e.printStackTrace(); 22 } 23 try { 24 if(fos != null){ 25 fos.close(); 26 } 27 }catch(Exception e){ 28 e.printStackTrace(); 29 } 30 fos = null; 31 } catch (FileNotFoundException e) { 32 e.printStackTrace(); 33 } catch (IOException e) { 34 e.printStackTrace(); 35 } 36 } 37 38}
Exception
1//発生例外 2java.io.FileNotFoundException: C:\ABCDEFGH (アクセスが拒否されました。) 3 at java.io.FileOutputStream.open0(Native Method) 4 at java.io.FileOutputStream.open(Unknown Source) 5 at java.io.FileOutputStream.<init>(Unknown Source) 6 at java.io.FileOutputStream.<init>(Unknown Source) 7 at Test.main(Test.java:13)
JRE6ではアクセスが拒否されず、ファイルが作成されるのですが、JRE8の場合上記のエラーが発生します。
これは、Javaのバージョンアップに伴い、FileOutputStreamの仕様が変更されたということでしょうか?
(Oracleが出しているリリースノートのようなものを見てもそれらしい記述は発見できませんでした。)
JRE8でCドライブ直下にファイルを作成する方法があれば、ご教示願えませんでしょうか。
(※そもそもCドライブ直下にファイルを作成するのがまずい等は、一旦棚に上げてご教示いただけませんでしょうか。)
(2019/09/24 11:30 追記)
Cドライブのアクセス権は、以下のように設定されています。
(2019/09/24 13:55 追記)
rubytomato様よりご指摘いただきました通り、
以下3点を確認致しました。
それぞれの結果は、以下の通りです。
- cmd.exeからCドライブ直下にファイルが作成できるか。
⇒ アクセスが拒否されました。
2. cmd.exeを管理者権限で立ち上げて、Cドライブ直下にファイルが作成できるか。
⇒ 作成できました。
3. 管理者権限で立ち上げたcmd.exeからJARファイルを実行し、ファイルが作成できるか。
⇒ 作成できました。
回答2件
あなたの回答
tips
プレビュー