LAN接続で外部フォルダに出力する方法

このQ&Aのポイント
  • ローカルで作成したClassファイルを使ってLAN上のサーバのフォルダにExcelファイルをコピーする方法について教えてください。
  • 同一PC上ではファイルの出力ができているが、LAN上のサーバのフォルダに出力する方法がわかりません。
  • サーバのパスを設定してファイルを出力する方法を教えてください。
回答を見る
  • ベストアンサー

LAN接続された外部フォルダに出力したい

お世話になります。 ローカルで作成したClassファイルを使って、ローカルにあるExcelファイルをLAN上にあるサーバのフォルダにファイルコピーしたいのですが、やり方がわかりなくて困ってます。 同一PC上だと final String output = "C:\\MyDoc\\test\\test.xls"; と、宣言しておいて PrintWriter pw = new PrintWriter(new FileWriter(output))); のように記述して出力できてます。 単純に考えると、パスを切る宣言でサーバのパスを切ればいいのかと思い、そうしてみましたが上手くいきません。 いい方法をご存知でしたらお教えください。 よろしくお願いします。

  • Java
  • 回答数4
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

結局 プログラム(クラスファイル)のある場所 プログラムを実行するバッチファイルのある場所 SQLファイルのある場所 は 全てBサーバー だけど、 最初にキックするバッチが Aサーバー にあるので、 プログラムはAサーバーのメモリにロードされて、AサーバーのCPUで実行されます。 Aサーバーからファイルの出力先であるCサーバーは ・物理的に線でつながっている ・ネットワークドライブの割り当てなどでAサーバーから見えている 上記条件を満たしていれば大丈夫に思えます。 (あとはプログラム中で出力先のパスはAサーバー(実行している場所)から見たパスで記述しないといけないことに注意して下さい。) Bサーバーで実行してCサーバーにファイルが出力できたのなら権限は大丈夫そうですね。 あとは…しつこくて申し訳ありませんが、 ・プログラムは正常終了しているのですか? ・例外など出ていませんか? ・出ているのに握りつぶしていませんか? ・ログなどに「上手くいかない理由」は出力されていないのでしょうか? JAVAで例外も発生せずにファイルが出力できずに正常に終了するとは考え難いのですが。 以下余談です。 自分もまだまだ「人に使われる立場の人間」なのであまり偉そうなことは言えませんが、 報告を受ける側として「上手くいかない」と”だけ”報告されて、そのまま「(上手くいかない)理由」を聞かないのはあまりよろしくないと思います。 (それで済むレベルなら構いませんが…)

ruminow
質問者

お礼

pcbeginnerさん。 詳しく回答頂きありがとうございました。 やっと理解できてきました。 >プログラムは正常終了しているのですか? >例外など出ていませんか? 例外処理を特に記述していなかったようです。 classファイルが存在する場所で実行すればOKなので、特に考えていませんでした。 おっしゃるとおりですので、これから記述してテストしてみるつもりです。 余談とはいえ、ご指摘ありがとうございます。 結局は、私自身がJavaのことをよく知らないので聞き込みがよくできなかったこと。 また、よく聞き込みもできずにこちらに書き込んだのは明らかに怠慢ですね。 反省してます。 ともかくお返事いただけて本当に助かりました。

その他の回答 (3)

回答No.3

>よく聞いてみるとこういうことのようです 質問者さん本人じゃないようですね… ですから… >そうしてみましたが上手くいきません。 プログラム自体は正常終了しますか? 例外などが発生していませんか? (↑実は例外が発生しているけど  try{   //ファイル出力処理  }catch(Exception e){   //何もしない  } のように例外を握りつぶしていませんか?) あと気になったのは、 クラスファイルはBサーバーにある。 んですよね? でも実際に実行しているのはAサーバーなのでプログラム(JVM)が動いているのはAサーバーですよね? AサーバーからBサーバーのファイルを書き出すフォルダへの権限はありますか? ??? >同一PC上なので、 AサーバーからBサーバーのバッチを起動して、 Bサーバーのバッチの処理でJAVAを動かしているんだから、プログラムはAサーバーで実行してますよね? 同一PCじゃないんじゃないですか??? 簡単なサンプルを作って試してみましたけど、ちゃんとファイルできました。 (ネットワークドライブに割り当てて接続した後に実行しました。) Zドライブがネットワークドライブです。 -------------------------------------------------- import java.io.*; public class NetworkDrive{ public static void main(String args[]){ try{ File f = new File("Z:\\hoge\\hogehoge\\hoge.txt"); FileOutputStream fos = new FileOutputStream(f); String hoge = "hoge"; fos.write(hoge.getBytes()); fos.close(); }catch(Exception e){ e.printStackTrace(); } } } --------------------------------------------------

ruminow
質問者

補足

pcbeginnerさん。 要領を得なくてすみません。 再度、状況を書いてみますと ---------------------------------------- Aサーバ:Access/mdb(バッチの起動) Bサーバ:バッチファイル(Javaプログラムの起動) Bサーバ:Classファイル、Javaプログラムで使用するsqlファイル Cサーバ:Javaプログラムで作成したExcelファイルの出力先 POIパッケージを使用していて、BサーバからJavaプログラムを直に実行させた場合、CサーバにExcelファイルが出力されています。 フォルダの権限については、そのような権限をつけていないようです。

回答No.2

>そうしてみましたが上手くいきません。 何がどう上手くいかないのでしょうか? >Classファイルのある場所と出力先が違うと出力できないのです。 出力できないとはどういうことですか? 例外が発生するということですか? 例外ならその内容を記述した方がいいですよ。 可能ならソースも。 また「Classファイルのある場所と出力先が違う」というのは ・フォルダが違う ・ドライブが違う ということでしょうか? どちらでも出力はできそうですが…。 アプレットじゃぁないですよね…。 書き込み権限があるフォルダですよね…。

ruminow
質問者

補足

レスありがとうございます。 よく聞いてみるとこういうことのようです。 ------------------------------------------ Aサーバ上にあるAccsess(mdb)からBサーバにあるバッチファイルを起動させ、そのバッチファイルから同じサーバ上にあるClassファイルを起動します。 Accsess(mdb)はバッチファイルを起動するだけ。 実行させるClassファイル(Javaプログラム)では、ある処理をさせた結果をExcelファイルに書き出し、そのExcelファイルをBサーバのあるフォルダ(Xとします)に出力させるということをさせています。 同一PC上なので、 final String output = "C:\\MyDoc\\test\\test.xls"; と、宣言しておいて PrintWriter pw = new PrintWriter(new FileWriter(output))); のように記述して出力できるかと思うのですができません。 単純に考えると、パスを切る宣言でサーバのパスを切ればいいのかと思い、そうしてみましたが上手くいきません。 いい方法をご存知でしたらお教えください。 よろしくお願いします。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

サーバーのパスをネットワークドライブに割り当ててみるとか

ruminow
質問者

補足

レスありがとうございます。 補足しますと、Classファイルのある場所と出力先が違うと出力できないのです。 なのでご回答いただいたようなことでは解決できないようです。

関連するQ&A

  • Java・ファイルへの書き込み

    はじめまして。 下記のプログラムで、以下の3つがどのような関係なのかがわかりません。 ("test1.txt")とnew FileWriterの関係 (new FileWriter("test1.txt")とnew BufferedWriterの関係 (new BufferedWriter(new FileWriter("test1.txt")と new PrintWriterの関係 どうかご教示いただきたく、よろしくお願い致します。 import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; public class Sample7 { public static void main(String[] args){ PrintWriter pw = null; try{ pw = new PrintWriter (new BufferedWriter(new FileWriter("test1.txt"))); pw.println("Hello!"); pw.println("GoodBye"); System.out.println("ファイルに書き込みました。"); }catch(IOException e){ System.out.println("入出力エラーです。"); }finally{ if(pw != null){ pw.close(); } } } }

    • ベストアンサー
    • Java
  • ファイル出力時の

    以下のソースでファイル出力するのですが、 BufferedReader br = new BufferedReader(new FileReader(new File(args[0]))); PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(args[1]))); //一行読み込みを行った文字列を格納 String line; //一行読み込み while((line = br.readLine()) != null){ //一行書き込み pw.write(line); System.out.println(line); } コンソールへの出力は正常に出力されるのですが、 ファイルへの出力は改行されずに一行で出力されてしまいます。 どうすればファイル出力も正常になるか教えてください。

  • 困ってます

    HTMLファイルのフォームのパラメータをサーブレットに引渡し、サーブレット内で、ファイルに出力(CSV形式)したいのですが、日本語が含まれていると文字化けしてしまいます。 文字化け防止の為に下記のようなコードを書いているのですが、うまくいきませんでした。(フォームの"name"というパラメータをサーブレットに渡します。) ----------------------------------------------------- (サーブレットのファイルより一部抜粋) //変数&定数の宣言 private static final String csvFile = "/home/csvFile.csv"; String name; FileWriter fw = new FileWriter(csvFile); PrintWriter pw = new PrintWriter(fw); //☆文字化け防止コード name = request.getParameter("name"); name = new String(name.getBytes("8859_1"),"SJIS"); //ファイルに出力 pw.print(name + ","); pw.close(); ----------------------------------------------------- 上記のようなコードの書き方だと駄目でしょうか? ちなみに"SJIS"を"euc-jp"、"JisAutoDetect"に変えてもうまくいきませんでした。 実行方法は (1).windowsでサーブレットをコンパイルし、 (2).(1)で出来たクラスファイルをLinuxに転送し、 (3).Linux上でTomcatの再起動をして実行しています。 もし何か分かることがありましたらご教授お願い致します。

  • JavaのFileWriterについて

    はじめまして。 以下のようなプログラムで、new FileWriter("test1.txt")の【test1.txt】が最終的にどの親クラスのコンストラクタ(メソッド?)に渡されて処理されるのかがわかりません。 new演算子で FileWriterオブジェクトを作成した際に、importした親クラスのFileWriterクラスにあるコンストラクタが呼び出されるのだろうとは思っています。 そこで、JavaのAPIのサイトにて、クラス FileWriterの説明(http://docs.oracle.com/javase/jp/6/api/)を読みましたが、コンストラクタが複数紹介されており、下記のプログラムに当てはまるものがどれか分かりませんでした。 また、クラス FileWriterの説明ページのコンストラクタの概要にあるpublic FileWriter(File file)というコンストラクタの場合、引数リストのFileにもリンクがあり、Fileのリンク先のページであるクラス Fileの説明(http://docs.oracle.com/javase/jp/6/api/)を読みましたが、結局test1.txtがどのクラスのコンストラクタ(メソッド?)でどのように処理されているのかが分かりません。 どうかご教示いただきたく、よろしくお願い致します。 import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; public class Sample7 { public static void main(String[] args){ PrintWriter pw = null; try{ pw = new PrintWriter (new BufferedWriter(new FileWriter("test1.txt"))); pw.println("Hello!"); pw.println("GoodBye"); System.out.println("ファイルに書き込みました。"); }catch(IOException e){ System.out.println("入出力エラーです。"); }finally{ if(pw != null){ pw.close(); } } } }

    • ベストアンサー
    • Java
  • Writer & PrintWriter

    import java.io.*; public class JavaIO4 { public static void main(String args[]) throws Exception { Writer w=new FileWriter(args[0]); PrintWriter pw=new PrintWriter(w); for (int i=0; i<=330; i+=30) { double atai=Math.sin(Math.PI*i/180.0); String str="sin("+i+")="+atai+"\n"; pw.write(str); } pw.close(); } } と import java.io.*; public class JavaIO4 { public static void main(String args[]) throws Exception { //Writer w=new FileWriter(args[0]); PrintWriter pw=new PrintWriter(args[0]); for (int i=0; i<=330; i+=30) { double atai=Math.sin(Math.PI*i/180.0); String str="sin("+i+")="+atai+"\n"; pw.write(str); } pw.close(); } } の結果が同じになるんですけど、 Writer w = new FileWriter(args[0]); PrintWriter pw = new PrintWriter(w); とするのはなぜなんですか? 何か意味はあるんですか?

  • 「得た値をCSV出力するJAVAプログラムを書きたい」

    「得た値をCSV出力するJAVAプログラムを書きたい」 固定したある点とクリックした点の距離は取得できました つまり、クリックするごとに2点間の距離は変わります 例えば 1回目:10cm 2回目:20cm 3回目:5cm とします 流れはクリック→10cmという値を取得→クリック→20cmという値を取得→・・・ するとCSVファイルには10,20,5という風に出力されるようにJAVAプログラムを書きたいです 色々調べたんですが、読み込みの方法がいまいちわかりません(全体的なこともですが・・・) データベースを読み込むとかはよく見かけるのですが。 また、実行したら勝手にCSVファイルが出来るのか? 下記のプログラムまでは出来ました import java.io.*; public static void main( String args[] ) { try { PrintWriter pw = new PrintWriter( new BufferedWriter( new FileWriter( "output.csv" ) ) ); pw.println( "kyori" ); System.out.println( "ファイルに書き込みました。" ); pw.close(); } catch( IOException exp ) { System.out.println( "入出力エラーです。" ); } } 何かアドバイスをお願いします。

  • java classの呼び出し方を教えて下さい。

    java classの呼び出し方を教えて下さい。 public class test extends Applet implements Runnable,ActionListener,KeyListener{ Thread th; // スレッド宣言 AudioClip IdoSound,KaitenSound,KesiSound,SetSound,CrySound; public void init(){ }   ・   ・   ・ public void test(){ ここで、最下欄の class stream{ public static void main(String args[]){ } を実行させたいのですが、記入方法が解りません・・・ } public int kesiOne(int VP,int HP){ }    ・    ・    ・ class stream{ public static void main(String args[]){ try{ File file = new File("c:\\java\\data.txt"); if (checkBeforeWritefile(file)){ PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(file))); pw.println("12345"); pw.close(); }else{ System.out.println("ファイルに書き込めません"); } }catch(IOException e){ System.out.println(e); } } private static boolean checkBeforeWritefile(File file){ if (file.exists()){ if (file.isFile() && file.canWrite()){ return true; } } return false; } } 解りにくい書き方で申し訳け有りませんが、宜しくお願いします。

  •  DataをtxtFileに書かせて、同じFileから読み込みです、エラーの意味が不明です

    JAVA初心者です、宜しくお願いします。  DataをtxtFileに書かせて、同じFileから読み込ませるコードですが、書き込みは正常に出来、(test1.txt)Fileも出来、内容もOKなのですが、同じFileからの読み込みがエラーになります。 一体どこが間違っているのでしょうか。 Fileは同じプロジェクトにおいています。(当然同一Fileからの読み込みです。) 諸兄の方々宜しくお願いします・・・正直泣いています。 public class Write_Read_070620{ public static void main(String args[]){ try{ PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter("test1.txt"))); pw.println("Hello!!"); pw.println("Goodbye!!"); pw.close(); BufferedReader br0 = new BufferedReader(new FileReader("text1.txt")) ; String str0 = br0.readLine() ; System.out.println("入力データーを確認します\n" + " Team " + str0); br0.close(); } catch(IOException e){ System.out.println("入力エラ-です。\n "); } } }

    • ベストアンサー
    • Java
  • ファイル出力クラスの選択について(Java)

    少し長文になります。 Javaで、複数のオブジェクトに格納された文字列をループでgetして、 1つのファイル(test.txt)内に出力していくプログラムを作っています。 ファイル出力する際に使用可能なクラスがいくつもあるため、 どれを選択すればいいのか迷ってます。 以下の条件から、使用すべきクラスを教えて下さい! <ファイル出力の条件> ーーーーーーーーーーーーーー 1. ファイル(test.txt)は毎回新規で1ファイルのみ作成して、   そのファイル内にオブジェクトからループでgetした文字列を1行ずつ出力していく。   (次回実行の直前に、前回のtest.txtは手動削除する。) 2. test.txt内には日本語が出力される可能性があり、且つ、   test.txtをWindowsのアプリケーションで利用するため、   SJISにエンコードして出力する。   ※Javaの実行環境はLinux 3. バッファを使って出力する。 ーーーーーーーーーーーーーー 以上です。 私の考えでは、全てキャラクタストリームを使って、 ---------- FIleWriter fw = new FileWriter("test.txt",true);  OutputStreamWriter osw = new OutputStreamWriter(fw,"SJIS"); BufferedWriter bw = new BufferedWriter(osw); ---------- でいいのかなと思ったのですが、 ネットを見ていると ---------- FileOutputStream os = new FileOutputStream("output"); OutputStreamWriter osw = new OutputStreamWriter(os, "JIS"); BufferedWriter bw = new BufferedWriter(osw); PrintWriter pw = new PrintWriter(bw); ---------- という記述もあり、 わざわざキャラクタストリームとバイトストリーム(FileOutputStream)を混ぜて使っている意図もよく分かりません。 (文字列を扱うのに、バイトストリームを使う意味って無いですよね??) それから、私の例では FIleWriterインスタンス生成時の引数で"true"を指定して test.txtに"追記"するように設定してますが、 test.txt自体は毎回新規作成のものを使うので、この場合trueもfalseも不要でしょうか?? (→認識の確認として、 「trueやfalseはあくまで既存ファイルに対しての追記/上書きの設定であって、 ファイルをオープンしてクローズするまでの間はtrueなど設定しなくても ずっと末尾に追記されていく」という認識でOK?) また、true/falseが不要な場合、 FIleWriterは使わずに、 ---------- OutputStreamWriter osw = new OutputStreamWriter("test.txt","SJIS"); BufferedWriter bw = new BufferedWriter(osw); ---------- としても問題無いでしょうか?? 以上、分かる方、アドバイスください!

    • ベストアンサー
    • Java
  • BufferedReaderで配列のデータを取り出したい

    PrintWriterで配列のデータを書き込み、 BufferedReaderで書き込んだデータを呼び出したい のですが、下記のソースで書き込むと [Ljava.lang.String;@1add2dd のように表示されてしまいます。 テキストファイルに 1,Server1 のような感じで 書き込んで読み込むにはどのようにしたら いいでしょうか? すみません、ご教授下さい。 よろしくお願いします。 import java.io.*; public class IOTest { public static void main(String[] args) { try{ PrintWriter pr = new PrintWriter( new BufferedWriter(new FileWriter("test.txt")),true); String index = "1"; String serverName = "Server1"; String Server [] = {index, serverName}; pr.println(Server); System.out.println("登録したデータは:" + Server + "です。\n"); BufferedReader br = new BufferedReader( new FileReader("test.txt")); String line; while((line = br.readLine()) != null){ System.out.println("取り出したデータは:" + line + "です。"); } }catch(Exception e){ e.printStackTrace(); } } }

    • ベストアンサー
    • Java