環境
Windows Server2019 2台
※Server2台あるため、ServerA,ServerBとさせていただきます。
目的
ServerAの共有フォルダ内に置かれたファイルをServerBのローカルフォルダへコピーしたい。
実施内容
リンク内容
上記サイトを参考に、ファイルパスを設定し、実行しましたところ、
ログにて、アクセス拒否と表示され、コピーに失敗しました。
共有フォルダへの接続はユーザー認証が必要なため、あらかじめ、認証を終えています。
※net useを用いたバッチを実行しているため、認証に失敗している可能性はありません。
質問
Windowsの機能にて認証しているにも関わらず、アクセス拒否とログに表示されてしまうのは、Java処理内で認証処理を行わずに共有フォルダを参照しようとしているのが原因なのでしょうか?
追記
・エラーコード
java.nio.file.AccessDeniedException: <共有フォルダ>¥<ファイル名>
・ソース
Java
1Path sourcePath = Paths.get(<共有フォルダ>¥<ファイル名>); 2 Path destinationPath = Paths.get("c:\test\test2\b.txt"); 3 4 try { 5 Files.copy(sourcePath,destinationPath); 6 } catch (IOException e) { 7 e.printStackTrace(); 8 }
追記2
net useをJava処理内で実行していないことが原因との指摘を受けたため、以下のサイトを参考にコードを編集し、net useを実行後、コピー処理を走らせるように変更しました。
リンク内容
すると、net useの認証処理にて、
システムエラー1312が発生しました。
指定されたログオン セッションは存在しません。そのセッションは既に終了している可能性があります。
終了コード: 2
というログが出力されました。
変更後ソース
Java
1 String cmds[] = new String[] { 2 "net", 3 "use", 4 "IPアドレス", 5 "/USER:username", 6 "password", 7 }; 8 9 Process p = Runtime.getRuntime().exec(cmds); 10 String line; 11 12 // stderr 13 System.out.println("*** STDERR:"); 14 BufferedReader error = new BufferedReader(new InputStreamReader(p.getErrorStream())); 15 while ((line = error.readLine()) != null) { 16 System.out.println(line); 17 } 18 19 // stdout 20 System.out.println("*** STDOUT:"); 21 BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream())); 22 while ((line = input.readLine()) != null) { 23 System.out.println(line); 24 } 25 p.waitFor(); 26 27 int exitCode = p.exitValue(); 28 System.out.println("終了コード: " + Integer.toString(exitCode)); 29 } 30 31Path sourcePath = Paths.get(<共有フォルダ>¥<ファイル名>); 32 Path destinationPath = Paths.get("c:\test\test2\b.txt"); 33 34 try { 35 Files.copy(sourcePath,destinationPath); 36 } catch (IOException e) { 37 e.printStackTrace(); 38 }
回答1件
あなたの回答
tips
プレビュー