- PR -

フォルダの複製の方法が分かりません。。。

投稿者投稿内容
IB
会議室デビュー日: 2005/09/03
投稿数: 18
お住まい・勤務地: 神奈川
投稿日時: 2005-09-11 20:23
こんばんは。
件名の通り、フォルダ複製が出来ずに困っています。

例えば、Cドライブ直下にb.jpgが格納されている「aフォルダ」を、
デスクトップ直下に複製したいのですが・・・。

うまくいきません。

どなたか教えていただけないでしょうか。
ご返答お待ちしてます。


山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-09-11 21:03
シェルのコマンドではなくて、Javaで行う場合の話ですよね?
たぶん「コピーする」APIは用意されていないのでゴリゴリやる必要があります。

ファイル単体のコピーは
・ファイルを読み込む
・ファイルを書き込む
と2つの手順が必要になります。なんとなくイメージできますか?
分からない場合、ファイルを読み込んで標準出力に表示するプログラム、任意の文字列をファイルを書き込むプログラムを別々に作ってみましょう。java.io.* のパッケージを利用することになります。

あとはどれくらいバッファするか、とか細かい要素はありますが組み合わせるだけです。

で、フォルダ直下のファイル一覧を取得するのは File クラスにそういうメソッドがあるので探してみましょう。
直下のファイルだけでなく、フォルダの中のフォルダ、ファイルも辿っていくには再起的なプログラミングが必要になります。

[ メッセージ編集済み 編集者: インギ 編集日時 2005-09-11 21:05 ]
IB
会議室デビュー日: 2005/09/03
投稿数: 18
お住まい・勤務地: 神奈川
投稿日時: 2005-09-11 22:04
インギさんへ
ご返信ありがとうございます。

BufferedInputStream bis = new BufferedInputStream( new FileInputStream( "Cドライブ\\aフォルダ\\b.jpg" ) );

BufferedOutputStream bos = new BufferedOutputStream( new FileOutputStream( "デスクトップ" ) );

byte b[] = new byte[1024];
int count;

while( ( count = bis.read( b , 0 , 1024 ) ) != EOF ){
 bos.write( b , 0 , count );
}
bos.close();

上記ソースだと、うまくいきません。
何故でしょうか???
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-09-11 22:38
なにがどううまくいきませんか?
症状をもう少し詳しく書きましょう。

読み込みはうまくいってますか?
書き込みはうまくいってますか?
raystar
ぬし
会議室デビュー日: 2003/01/16
投稿数: 251
お住まい・勤務地: Tokyo/Japan
投稿日時: 2005-09-11 22:41
こんばんわ。

引用:

BufferedInputStream bis = new BufferedInputStream( new FileInputStream( "Cドライブ\\aフォルダ\\b.jpg" ) );

BufferedOutputStream bos = new BufferedOutputStream( new FileOutputStream( "デスクトップ" ) );



このあたりがよくわからないのですが、
Cドライブというのはわかりやすく書いていただいたのでしょうか。

Windows だと c:\\aフォルダ\\b.jpg ですよね。
あと、デスクトップにアクセスしているようですが、
私のWinXP環境ですと

C:\Documents and Settings\ユーザ名\デスクトップ

となるようです。
実行時のカレントディレクトリはどこでしょうか。

これですと、デスクトップという"ファイル"に書き込んでいるように
うけとれます。

File#createNewFile() や File#mkdir() などであらかじめ、
ファイルやディレクトリを作成可能です。

1.ディレクトリをつくる
2.空ファイルを作る
3.OutputStreamでぶちこむ

このような手順でコピーを再現可能です。

以上、ご参考まで!
IB
会議室デビュー日: 2005/09/03
投稿数: 18
お住まい・勤務地: 神奈川
投稿日時: 2005-09-13 23:50
インギさん、raystarさんへ
ご返信ありがとうございます。遅れてすみません。

何とか、jpgやtiffファイルの複製が出来るようになりました!
ありがとうございます。
後は、txtファイルやgifファイルを何とかしたいのですが・・・。

下記ソースの不具合等、ご指摘頂けたら幸いです。
java素人なもので。。。


import java.io.*;

public class TmpClass{
public static void main( String[] args ){

String from_path, to_path;
File from;
File to;
int count;
byte a[];
byte buf[] = new byte[50000];

FileInputStream fis;
BufferedInputStream bis;
FileOutputStream fos;
BufferedOutputStream bos;

to_path = "C:\\Documents and Settings\\NEC-PCuser\\デスクトップ\\";
from_path = "C:\\a.jpg";
// from_path = "C:\\test.txt";

int to_last = to_path.lastIndexOf( "\\" );
int to_last_path = to_path.length();
String to_name = to_path.substring( to_last +1 , to_last_path );

int from_last = from_path.lastIndexOf( "\\" );
int from_last_path = from_path.length();
String from_name = from_path.substring( from_last + 1 , from_last_path );

to_path = to_path + from_name;
to = new File( to_path );

from = new File( from_path );

try{
fos = new FileOutputStream( to ); //「デスクトップ」。
bos = new BufferedOutputStream( fos );
fis = new FileInputStream( from ); //「a.jpg」。
bis = new BufferedInputStream( fis );

while( (count = bis.read( buf , 0 , 50000 ) ) != -1 ){
bos.write( buf , 0 , count );
}
bis.close();
fis.close();
fos.close();
bos.close();
}catch( IOException io){
System.err.println( io );
 }
}
}
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-09-14 02:02
>何とか、jpgやtiffファイルの複製が出来るようになりました!
>ありがとうございます。
>後は、txtファイルやgifファイルを何とかしたいのですが・・・。
jpg、tiffファイルはコピーできても、txt、gifファイルはコピーできていないという意味でしょうか?
繰り返しになりますが、もう少し症状を具体的に書いて見てはいかがでしょうか?
症状さえわかればソースコードを見なくてもアドバイスができる場合がありますので。
IB
会議室デビュー日: 2005/09/03
投稿数: 18
お住まい・勤務地: 神奈川
投稿日時: 2005-09-19 19:25
インギさんへ
返信が遅れてしまい、大変申し訳ございません。

実はSWINGを使用して、選択したファイル(フォルダ)を任意の階層に
ZIP形式で圧縮保存するプログラムの作成を試みています。

現状で2点、不可解な動きをします。。。
@ファイル名が2バイトの場合、圧縮保存後は文字バケしてしまう。
 ※1バイトの場合、正常に圧縮保存される。
Aフォルダ指定の場合、階層が維持できない。
 ※選択したルートフォルダより下位階層のファイルは保存出来るのですが、
  全て直下に移動してしまう(「aフォルダ」直下に「b.jpg」と「cフォルダ」、
  「cフォルダ」内に「d.jpg」という構成の場合で、「aフォルダ」を選択して
  圧縮保存を試みた場合、「a.zip」直下に「b.jpg」と「d.jpg」が並んでしまう)。

色々試みているのですが・・・。
お手すきな際にアドバイスを頂けると幸いです。
よろしくお願いします。

スキルアップ/キャリアアップ(JOB@IT)