6、使用IO流實現檔案複製並修改檔案字尾
阿新 • • 發佈:2018-12-29
程式設計題目:
6.編寫一個程式,將D:\java目錄下的所有.java檔案複製到D:\jad目錄下,並將原來檔案的副檔名從.java改為.jad。
示例程式碼:
package program.stream.exercise06;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.FilenameFilter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Reader;
import java.io.Writer;
/**
* 6.編寫一個程式,將D:\\java目錄下的所有.java檔案複製到D:\\jad目錄下,
* 並將原來檔案的副檔名從.java改為.jad。
*/
public class FileCopy {
public static void main(String[] args) {
File oriFile = new File("D:\\java");//原檔案目錄
//file.exists():判斷檔案目錄是否存在
//file.isDirectory():判斷檔案目錄是否是一個目錄
if(!(oriFile.exists() && oriFile.isDirectory())){
System.out.println("檔案目錄不存在!" );
}
File[] files = oriFile.listFiles(
new FilenameFilter(){ //檔名稱過濾器
public boolean accept(File file, String name) {
return name.endsWith(".java");
}
}
);
System.out.println(files.length);//原檔案個數
File objFile = new File("D:\\jad");//目標檔案目錄
//objFile.exists():判斷目標檔案目錄是否存在
//objFile.mkdir():建立目標檔案目錄
if(!objFile.exists()){
objFile.mkdir();
}
//copyByte(files,objFile);
copyChar(files,objFile);
System.out.println("寫入完成!");
}
//使用位元組流進行檔案複製(位元組緩衝流可以不使用,使用其目的主要是為了提高效能)
private static void copyByte(File[] files,File objFile){
InputStream inputStream = null;
OutputStream outputStream = null;
BufferedInputStream bufferedInputStream = null;
BufferedOutputStream bufferedOutputStream = null;
for(File f : files){
//替換檔案字尾
String objFileName = f.getName().replaceAll("\\.java$", ".jad");
try {
inputStream = new FileInputStream(f);
outputStream = new FileOutputStream(new File(objFile,objFileName));
bufferedInputStream = new BufferedInputStream(inputStream);
bufferedOutputStream = new BufferedOutputStream(outputStream);
int c = 0;
while((c = bufferedInputStream.read()) != -1){
bufferedOutputStream.write(c);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
bufferedOutputStream.close();
bufferedInputStream.close();
outputStream.close();
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
//使用字元流進行檔案複製(字元緩衝流可以不使用,使用其目的主要是為了提高效能)
private static void copyChar(File[] files,File objFile){
Reader reader = null;
Writer writer = null;
BufferedReader bufferedReader = null;
BufferedWriter bufferedWriter = null;
for(File f : files){
//替換檔案字尾
String objFileName = f.getName().replaceAll("\\.java$", ".jad");
try {
reader = new FileReader(f);
writer = new FileWriter(new File(objFile,objFileName));
bufferedReader = new BufferedReader(reader);
bufferedWriter = new BufferedWriter(writer);
int c = 0;
while ((c=bufferedReader.read()) != -1) {
bufferedWriter.write(c);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
bufferedWriter.close();
bufferedReader.close();
writer.close();
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
結果顯示: