JSPとサーブレットでファイルを別フォルダにコピー&貼り付けする方法

このQ&Aのポイント
  • JSPとサーブレットを使用して、画像ファイルやzipファイルなどをアップロードするサイトを作成しています。現在、アップロードしたファイルを別のフォルダにコピー&貼り付けする処理を行いたいと思っています。
  • 詳細な解説をしているサイトや、java.ioを使用してファイルをコピー&貼り付けする方法について知っている方はいらっしゃいますか?お知恵をお借りできれば幸いです。
  • また、ファイルの読み込みや書き込みに関してはjava.ioを使用することができますが、コピー&貼り付けの方法については見つけることができませんでした。どなたか教えていただけますか?
回答を見る
  • ベストアンサー

jsp&サーブレットにてjpgやzip等のファイルを別フォルダにコピー&貼り付けの処理

現在jsp、サーブレット、ビーンにて 画像ファイルやzipファイルなどをアップロードできるサイトを作成していまして、アップロードについては jakartaのfileuploadで特定のフォルダにアップロードする処理は上手くいったのですが、 アップロードしたファイルを、別のフォルダにコピー&貼り付けさせるような処理を行いたいと思っています。 java.ioについて調べてみると txtファイルの中身を読み込んだり書き込んだりする 処理しか見つける事ができず、つまずいております。 どなたかjpgやzip等を別フォルダへの 解説をしているサイトをご存知でしたら 教えていただけますでしょうか。 もしくはあのクラスを利用すれば出来る等でも 結構ですので、すみませんがご教授よろしくお願いします

  • Java
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • ngsvx
  • ベストアンサー率49% (157/315)
回答No.1

InputStream,OutputStreamを使えばバイナリ処理(1バイト単位での読み書き)ができます。 そのままでは効率が悪いので、これにバッファーを付ける意味で、BufferedInputStreamなどを一緒に使います。

singo333333
質問者

お礼

ありがとうございます。 InputStream等を検索する事で解決できました。 ちなみにもし私のように別ファイルへの コピーで困ったという方が現れた時の為に 参考になったアドレスをのせておきます http://www.techscore.com/tech/J2SE/IO/2.html ここのページを参考にしました また私はeclipseを利用してtomcatのサーブレットの中にて 処理をしようと思っており サーブレット.javaの中に try { FileInputStream input=new FileInputStream("C:\\○○○\\eclipse\\workspace\\○○\\file\\1.gif"); FileOutputStream output=new FileOutputStream("C:\\○○○\\eclipse\\workspace\\○○○\\file\\aa\\1.gif"); byte buf[]=new byte[256]; int len; while((len=input.read(buf))!=-1){ output.write(buf,0,len); } output.flush(); output.close(); input.close(); } catch (Exception e) { } このようなコードでfile/1.gifのgifファイルを fileフォルダの下の断層下にあるaaフォルダの中に file/aa/1.gifとしてコピー&ペーストする事ができました。 これからBufferedInputStreamについても 実装させていこうと思います。 初歩的な質問にご回答頂きまして、 ngsvx様本当にありがとうございました。

関連するQ&A

  • javaサーブレットでjspへのフォワード処理と、ファイルに出力処理を行いたいのですが。。

    今javaサーブレットとjspでツール作成中です。 DBにアクセスして、その内容をCSVファイルに書き出すというツールなのですが、サーブレットではjspにフォワードという処理と、ファイルに出力という処理の二つを同時に行うことができるのでしょうか。 たくさんの本やサイトにそれぞれ片方の処理だけする場合は載っているのですが、両方を並行して処理させる場合のサーブレットの書き方がわかりません。。 jspからの情報をもとにサーブレットでDAOを生成、DBにアクセスし、検索結果をDTO(一行の情報はBean)に格納し、それをサーブレットからjspにフォワード&CSV出力というものを作りたいと思っています。 よろしくお願いします。

  • フォルダ階層のあるzipファイルで全ファイルを抽出

    こんにちは 日々のちょっとした作業が煩わしくて、自動化できないかと思い質問します。 仕事で毎日、何度となく zip ファイルを受け取ります。このzipファイルは次のような階層になっています。 パターン1: base.zip -folder1 --folder2 ---folder3 ----workfile.txt パターン2: base.zip -folder1 --folder2 ---folder3 ----folderA -----workfileA.txt ----folderB -----workfileB.txt ----folderC -----workfileC.txt 必要なのは、パターン1の場合は workfile.txt、パターン2の場合は workfileA|B|C.txt です。毎日このフォルダ階層をたどって、最後のファイルをコピーしてまた元のディレクトリに戻ってペーストしています。パターン2の場合も、最後のA|B|Cファイルを元の同じ1つのディレクトリに並べてコピーしています(foldrA|B|Cに分かれていても関係ない、ということです)。 こうした作業を自動化する方法はないでしょうか。 7-zip アプリケーションは導入しています。 おそらく、考え方としては、zip 内にある「フォルダ以外」=「ファイル」を、そのzipファイルと同じディレクトリにすべて展開する、というスクリプトになると思います。 7-zip あたりのコマンドラインをbatファイルでこねくり回すとできるのか、zip をフォルダとして展開した後、batかwshスクリプトでぐるぐる回すのか、どうしたらよいかわかりません。 どなたかお知恵を貸してください。よろしくお願いします。

  • ZIPフォルダのファイルが不明

    以前に同じ質問がされていたら申し訳ありません。 Windows XP です。 圧縮(ZIP形式)フォルダに適当なファイルを入れ、フォルダの「パスワードの追加」をしてファイルにパスワードを付けました。 そのパスワードが付いたファイルをそのまま右クリックして切り取りをし、別のフォルダで貼り付けの操作をしました。 すると、パスワードの入力ダイアログと、「移動しています」というダイアログが出ました。 そして、パスワードを入力してOKをクリックしますと、元のZIPフォルダのファイルが消え、移動先のフォルダにもファイルはありませんでした。 そのファイルはどこへ行ってしまったのでしょうか? 復帰の方法はあるのでしょうか? ちなみに、その後別のファイルで同じ操作をしてみましたが、ファイルがなくなってしまうときもあるしそうならないときもあります。 わかる方がいらっしゃればよろしくお願いします。

  • 別のフォルダにコピー

    Visual Basic Express 2012 テキストボックスにファイルをD&Dして、絶対パスを取得して 名前を変更してコピーしています。 D:\test\aaa.txt → D:\test\aaa_abc.txt "cmd /c copy " & filen1 & ".txt " & filen1 & "_abc.txt" filen1は拡張子なしの絶対パスになっています。 末尾に文字を追加してコピーしているのですが、パスの途中に 文字を追加したいです。 D:\test\aaa.txt → D:\test\old\aaa_abc.txt 上記のように別のフォルダにコピーするにはどうしたら良いでしょうか?

  • JSPとサーブレットとBean

    とある参考書には サーブレットからBeanを呼び、Beanからデータベースに接続して JSPで表示する。と書かれています。 しかし、とあるサイトには JSPファイルだけでデータベースに接続できるソース、 Beanを使用しなくてもデータベースに接続できるというソースが書かれていました。 Beanとは一体何なのでしょうか。と思うようになりました。JSPやサーブレットで接続することができるのであれば、Beanは不要なのでは?と思っています。 今、「Beanはデータベースに接続するだけのもの」としか理解できてなく、いまいちはっきりとしません。 Beanとは一体何なのでしょうか。 意見や参考できるサイトを教えていただけませんか、 よろしくお願い致します。

    • ベストアンサー
    • Java
  • 同名フォルダ・ファイルのコピー・貼り付けの手順過剰

    HDDにあるフォルダAを「コピー」し,外付けHDDにあるフォルダA(同名・中身も同名ファイル多数)に「貼り付け」すると,XPに比して,手順を何度も踏まねばなりません。 ●「この宛先には既に・・・・存在…」で「はい」をクリック ●「この場所には同じ名前のファイルが既に・・・」で,「同じ処理を…個の競合に適用」にチャック ●「コピーして置き換える」をクリック フォルダも,ファイルもすべて同名は上書きするだけですので,一回クリックするだけでできるように設定しておけますか? 方法があればお教えください。

  • VBScript フォルダ以下からファイルの検索、コピー

    VBScriptはまったくの初心者ですので、自分なりに調べてはみたのです がどうしてもわからなかったため質問しています。 OSはWinXPになります。 VBScriptで特定のフォルダ(C:\AAA\)以下からファイル(*.txt)を検索し てコピーするプログラムを書きたいです。 C:\AAA\・・・\*.txt 指定したフォルダからファイルを検索をすることはできたのですが、サ ブフォルダがたくさんある場合のファイル検索ができませんでした。 コピーの仕方は検索したファイルから最新のタイムスタンプのファイル以外を別フォルダにコピーしたいです。 あとわかりやすいVBScriptについて記載されているサイトも教えていただけると助かります。

  • Desktopのファイルを別フォルダにコピーしたい

    Desktop上のあるZIPファイル(例;zzz.zip)を別のフォルダ(例;DドライブのFolder1)にコピーして解凍する場合、下記のVBSで実行できると思いますが、これをDesktopの階層が異なる(後述の xxxxx)不特定多数のPCで実施する場合、実行できない場合があります。 このためDesktopの階層が左右されないScriptにしたいのですが、模範Scriptを教えていただけないでしょうか。DesktopPathなどで対応すればできるのでは、と思いますが、なかなかうまくいきません。 使用PCのOSはWindows7(32ビット)です。 '------------------------------------------------------------- DIR_Source = "C:\xxxxx\Desktop\zzz.zip" DIR_Destination = "D:\Folder1" Const FOF_Silent = &H04 Const FOF_NoConfirmation = &H10 Set objShell = CreateObject("Shell.Application") Set FilesInZip = objShell.NameSpace(DIR_Source).items Set objFolder = objShell.NameSpace(DIR_Destination) If (Not objFolder Is Nothing) Then objFolder.CopyHere FilesInZip, FOF_NoConfirmation + FOF_Silent End If

  • BAT+VBSでのファイルZIP化処理が終わらない

    Win7・Win2008環境にて、Windowsバッチ(.bat)から、 引数に対象フォルダ・ZIPファイル作成場所を受け取って フォルダのZIP化を行うVBSスクリプトを作成しています。 下記のスクリプトをsample.vbsで作成しsample.batから実行すると ファイルがZIPファイル内に格納されておりません。(空のZIPファイル) そのため、「★★★」箇所の排他処理の関数を呼び出すようにすると ファイルがZIPファイル内に格納されるようになりましたが、 処理がいつまでも完了しません。 (コマンドプロンプトから直接コマンドライン実行すると正常終了します。) 何か間違ってますでしょうか?(そもそもフォルダのZIP化手順も含め) ご教授ほどよろしくお願い致します。 ■sample.vbs ※okwave用インデントのために全角スペース使用 ' ******************************************************* ' オブジェクト定義 ' ******************************************************* Dim fso Dim subf Dim FileName    ' ファイル名 Dim ArgDam     ' 遡り日数 Dim DifDam     ' 遡り日数との差 Dim FDate      ' ファイル作成日 Dim strTargetFolder ' ZIPファイル作成フォルダ Dim m_objShell Set m_objShell = CreateObject("Shell.Application") Set fso = CreateObject("Scripting.FileSystemObject") intOutRet = 0 ' 引数の取得********************************************* ' 引数/ZIP化対象フォルダ情報を取得 Set subf = fso.GetFolder(WScript.Arguments(0)) ' 引数/ZIPファイルの情報を取得 strTargetFolder = WScript.Arguments(1) ' ZIP化処理********************************************** If CreateZipfile(subf, strTargetFolder) = false Then   intOutRet = 1 End If ' オブジェクト開放 Set fso = Nothing WScript.Quit intOutRet ' ZIPファイルの作成************************************** Private Function CreateZipfile(subf, strTargetFolder)   Dim intFileCnt   Dim idx   On Error Resume Next   intFileCnt = 0   For Each FileName In subf.Files     intFileCnt = intFileCnt + 1   Next   'intFileCnt = intFileCnt - 1   idx = 0   Dim intNumbers() '動的配列を宣言   ReDim intNumbers(intFileCnt)   For Each FileName In subf.Files     intNumbers(idx) = FileName     idx = idx + 1   Next   '書庫ファイル作成   fso.CreateTextFile(strTargetFolder, False).Write "PK" & Chr(5) & Chr(6) & String(18, 0)   '書庫オブジェクト取得   Set l_objZIP = m_objShell.NameSpace(CStr(strTargetFolder))   '圧縮対象ファイルを取得   For Each l_strItem In intNumbers     '書庫に追加     l_objZIP.CopyHere l_strItem     '書庫が排他状態で開けるまで、処理継続・・・・・・・・★★★     Do Until IsNoOpen(l_strItem)     Loop   Next   ' 正常終了   CreateZipfile = True   exit function   On Error Goto 0   ' 異常終了   CreateZipfile = false End Function '排他チェック******************************************** Private Function IsNoOpen(p_strFileName)   'エラー無視   On Error Resume Next   WScript.Sleep 100   'ファイルを追加モードで開く/閉じる   Call fso.OpenTextFile(p_strFileName, 8, false).Close   IsNoOpen = CBool((Err.Number = 0)) End Function ■sample.bat F:\BAT\sample.vbs "F:\LOG" "F:\LOG\sample.zip" exit

  • HTTP機能で、サーブレットでPDFファイルのダウンロードを行う処理の

    HTTP機能で、サーブレットでPDFファイルのダウンロードを行う処理の際に、 「ファイルのダウンロード」ダイアログボックス上の [キャンセル]ボタンをクリックした際の、 「キャンセルのイベント」を取得したいです。 (開発環境:WindowsXP SP3、Eclipse3.5、Java、サーブレット、JSP、        MySQL5、Apache2.2、Tomcat6等) (動作環境;サーバは、Linux(CentOS5.5)、       クライアントはWindowsXP SP2以上、              WebブラウザはInternet Explorer7以上) それを取得したい目的は、 「ファイルのダウンロード」された回数を、 毎回インクリメントして、カウント数として記録に残したい為です。 (「キャンセルのイベント」が取得出来ないと、    正確なダウンロード数がカウント出来ない為) もし、取得出来ないのでしたら、 「ファイルのダウンロード」ダイアログボックス を利用しない、何か別の方法でありましても、 「PDFファイルを、サーバ上からダウンロード」さえ出来れば、  (正確なダウンロード数がカウント出来れば) 上記致しました目的が達成出来てOKです。 お世話になります。 宜しくお願い致します。

    • ベストアンサー
    • Java

専門家に質問してみよう