1. 程式人生 > >Java實現檔案複製

Java實現檔案複製

程式碼實現複製檔案


/*

 * 編寫一個程式,將d:\java目錄下的所有.java檔案複製到d:\jad目錄下,並將原來檔案的副檔名從.java改為.jad。
 * <複製前改名>
 */
public class CopyFolder {
public static void main(String[] args) throws IOException {
// 封裝d:\\java這個目錄
File srcFile = new File("d:\\hellodong");

// 獲取該目錄所有滿足條件的File[]陣列。
File[] fileArray = srcFile.listFiles(new FilenameFilter() {

@Override
public boolean accept(File dir, String name) {
System.out.println(dir+"---"+name);
return new File(dir, name).isFile() && name.endsWith(".java");
}
});

//判斷是否存在目的地目錄,如果沒有,就建立。
File destFile = new File("d:\\jad");
if(!destFile.exists()){
destFile.mkdirs();
}


// 遍歷File[]陣列,獲取到每一個File。
for (File file : fileArray) {

// file--d:\\java\\Constant.java--資料來源
//最終的結果:d:\\jad\\Constant.jad--目的地
//複製前改名
String name = file.getName(); //Constant.java
String newName = name.replace(".java", ".jad");//Constant.jad
File newFile = new File(destFile,newName);//d:\\jad\\Constant.jad

//複製檔案
BufferedReader br = new BufferedReader(new FileReader(file));

BufferedWriter bw = new BufferedWriter(new FileWriter(newFile));

String line = null;
while((line=br.readLine())!=null){
bw.write(line);
bw.newLine();
bw.flush();
}

bw.close();
br.close();
}
}
}


/*
 * 編寫一個程式,將d:\java目錄下的所有.java檔案複製到d:\jad目錄下,並將原來檔案的副檔名從.java改為.jad。
 * <複製完之後改名>
 */
public class CopyFolder2 {
public static void main(String[] args) throws IOException {
File srcFile = new File("d:\\java");
File[] fileArray = srcFile.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return new File(dir, name).isFile() && name.endsWith(".java");
}
});
File destFile = new File("d:\\jad");
if (!destFile.exists()) {
destFile.mkdir();
}
for (File file : fileArray) {
String name = file.getName();
File newFile = new File(destFile, name); 

BufferedReader br = new BufferedReader(new FileReader(file));
BufferedWriter bw = new BufferedWriter(new FileWriter(newFile));

String line = null;
while((line=br.readLine())!=null){
bw.write(line);
bw.newLine();
bw.flush();
}
bw.close();
br.close();
}
File[] destFileArray = destFile.listFiles();
for(File file : destFileArray){
String name = file.getName(); 
String newName = name.replace(".java", ".jad");
File newFile = new File(destFile,newName);
file.renameTo(newFile);
}
}

}

二進位制流的複製

複製圖片:把專案路徑下的mn.jpg複製到d:\\mn.jpg

分析:

A:用字元流

B:用位元組流

二進位制流資料:圖片,視訊,音訊等。

由於二進位制的合併為字元,在我們使用的編碼表中沒有對應的資料,那麼,將來在寫回去的時候,就會有資料的丟失。

所以,二進位制流資料只能使用位元組流進行操作。

public class CopyImage {
public static void main(String[] args) throws IOException {
// method1();
method2();
}
// 用位元組流--一次一個位元組陣列
private static void method2() throws IOException {
// 封裝資料來源和目的地
FileInputStream fis = new FileInputStream("mn.jpg");
FileOutputStream fos = new FileOutputStream("d:\\mn.jpg", true);

// 讀寫
byte[] bys = new byte[1024];
int len = 0;
while ((len = fis.read(bys)) != -1) {
fos.write(bys, 0, len);
}
// 釋放資源
fos.close();
fis.close();
}
// 用字元流--一次一個字元
private static void method1() throws IOException {
// 封裝資料來源和目的地
FileReader fr = new FileReader("mn.jpg");
FileWriter fw = new FileWriter("d:\\mn.jpg");
// 基本讀寫
int ch = 0;
while ((ch = fr.read()) != -1) {
fw.write(ch);
// fw.flush();
}
// 釋放資源
fw.close();
fr.close();
}
}


 複製MP3,加入異常處理標準格式。
 
 資料來源:
 d:\\Pink.mp3
 目的地:
 copy.mp3

public class CopyMP3 {
public static void main(String[] args) {
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
bis = new BufferedInputStream(new FileInputStream("d:\\Pink.mp3"));
bos = new BufferedOutputStream(new FileOutputStream("copy.mp3"));
byte[] bys = new byte[1024];
int len = 0;
while ((len = bis.read(bys)) != -1) {
bos.write(bys, 0, len);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (bos != null) {
try {
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (bis != null) {
try {
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}