package j2.lesson09;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
/**
* 課題2201 - 解答例.
* ファイルを別のファイルにコピーするプログラム.
* @author arakawa
* @version $Id: BinaryCopier_java.rps,v 1.1 2006/03/06 12:56:15 java2005 Exp $
*/
public class BinaryCopier {
/**
* (バイナリ)ファイルを別のファイルにコピーするプログラム.
* @param args 無視される
* @throws IOException コンソール入力中に例外が発生した場合
*/
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
// print "コピー元のファイル名を入力:"
System.out.print("コピー元のファイル名を入力:");
// src = コンソール入力 (String)
String src = reader.readLine();
// print "コピー先のファイル名を入力:"
System.out.print("コピー先のファイル名を入力:");
// dst = コンソール入力 (String)
String dst = reader.readLine();
try {
// copy(src, dst)
copy(src, dst);
// if コピー中に例外が発生しなかった
// print src + "から" + dst + "にコピーしました。", 改行
System.out.println(src + "から" + dst + "にコピーしました。");
}
// else
catch (IOException e) {
// print src + "から" + dst + "にコピーできませんでした。", 改行
System.out.println(src + "から" + dst + "にコピーできませんでした。");
}
}
/**
* <code>src</code>から<code>dst</code>にファイルの内容をコピーする。
* このメソッド内で例外 {@link java.io.FileNotFoundException},
* {@link java.io.IOException} が発生した場合は、ここで捕捉せずに呼び出し元に通知される。
* @param src コピー元のファイル名
* @param dst コピー先のファイル名
* @throws IOException コピーしようとした際に例外が発生した場合
*/
// copy(src, dst)
public static void copy(String src, String dst) throws IOException {
// in = src ファイルを読み込むために開く
BufferedInputStream in = new BufferedInputStream(new FileInputStream(src));
try {
// out = src ファイルを書き込むために開く
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(dst));
try {
// in から out へ内容をコピーする
while (true) {
int c = in.read();
if (c == -1) {
break;
}
out.write(c);
}
// // こちらのほうが速い?
// byte[] buf = new byte[256];
// while (true) {
// int len = in.read(buf);
// if (len == -1) {
// break;
// }
// out.write(buf, 0, len);
// }
}
finally {
out.close();
}
}
finally {
in.close();
}
}
}
|