IO流综合案例
分析以下需求,并用代码实现
训练目标:
掌握java中字符流的基本使用,以及理解其在实际开发中的应用
需求描述:
编写一个程序,把一个目录里边的所有带.java文件拷贝到另一个目录中。
实现提示:
- 用File对象封装目录
- 通过listFiles()方法获取该目录下所有的文件或者文件夹的File对象数组
- 遍历这个File数组,得到每一个File对象
- 判断该File对象是否是文件
- 如果是文件
- 继续判断是否以.java结尾
- 是:复制文件
- 否:不复制
方法一
import org.junit.Test;
import java.io.*;
import java.util.ArrayList;
public class lx04 {
public ArrayList<String> al = new ArrayList<>();
@Test
public void test() throws IOException {
File file = new File("D:\\project");
name(file);
for (String o : al) {
File sourceFile = new File(o);
if (sourceFile.exists()) {
String name = sourceFile.getName();
String targetPath = "D:\\java\\java\\" + name;
try (InputStream is = new FileInputStream(sourceFile);
BufferedInputStream bis = new BufferedInputStream(is);
OutputStream os = new FileOutputStream(targetPath);
BufferedOutputStream bos = new BufferedOutputStream(os)) {
int c;
while ((c = bis.read())!= -1) {
bos.write((char) c);
}
} catch (IOException e) {
throw new RuntimeException(e);
}
} else {
System.out.println("源文件不存在:" + sourceFile.getAbsolutePath());
}
}
}
public void name(File file) {
boolean directory = file.isDirectory();
if (!directory) {
String name = file.getName();
if (name.length() > 5) {
if (name.substring(name.length() - 5).equals(".java")){
al.add(file.getAbsolutePath());
}
}
} else {
File[] files = file.listFiles();
if (files!= null) {
for (File f : files) {
name(f);
}
} else {
System.out.println("目录为空:" + file.getAbsolutePath());
}
}
}
}
方法二
@Test
public void test01() {
File file = new File("D:\\qy178-course\\day0903");//查询的目录
File file02 = new File("D:\\qy178-course\\bbbb");//目标目录
test(file, file02);
}
private void test(File file, File target) {
//判断目标目录是否存在。
if (!target.exists()) {
target.mkdirs();//创建目标目录
}
//判断传递的文件是否为目录
boolean b = file.isDirectory();
if(b){
//获取指定目录下所有的子文件对象
File[] files = file.listFiles();
for(File f:files){
test(f,target);
}
}else{
//表示文件 并获取文件名称
String name = file.getName();
if(name.endsWith(".java")){//表示为java文件。
//复制功能
copy(file,new File(target.getPath()+"\\"+name)); //
}
}
}
private void copy(File file,File target){
Reader reader= null;
Writer writer= null;
try {
reader = new FileReader(file);
writer = new FileWriter(target);
int c;
while ((c=reader.read())!=-1){
writer.write(c);
}
} catch (IOException e) {
throw new RuntimeException(e);
} finally {
try {
reader.close();
writer.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}