黑马程序员--第四篇 IO练习题分析总结
第四篇 IO练习题分析总结
今天是2015年11月13日星期五,我来谈谈在练习中的一些感想。今天的练习题是:
复制单级文件夹"E:\\sound" 目录下的.wav文件到 “E:\\juice”目录下,并改名为.mp4后缀。下面是我的分析和实现过程。
public class CopyFolder {
/** * @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
/* //思路:1,获取到每一个文件的file对象,
2,如果没有,就创建一个juice文件夹。
3, 获取到每一个juice里面文件的File对象
4,最后写一个循环,把源文件复制到目标文件中。
5,将复制过去的文件进行改名*/
File srcFolder=new File("e:\\sound");
File destiFolder=new File("e:\\juice");//封装源文件,目的地。
if(!destiFolder.exists()){
destiFolder.mkdir(); //如果目的地文件夹存在,就不创建,否则就要创建,因为它是文件夹,当你用输出流写出时并不会帮你创建文件夹,只是帮你创建文件而已,不要记混淆了。
}
//获取源文件下的.wav文件的file数组,并获取每一个file对象,
File[] file=srcFolder.listFiles(new FilenameFilter(){
@Override
public boolean accept(File dir, String name) {
return new File(dir,name).isFile()&&name.endsWith(".wav");
}
});//这里使用了筛选功能,直接只留下你设置条件后的文件。其二:由于形参是一个接口名,所以只需传入接口的匿名内部类即可。
for(File f:file){
//System.out.println(f);
//难点:怎么表示juice下面文件的file,应该是“e:\\juice\\文件”
String fileName=f.getName();
File destfile=new File(destiFolder,fileName);
//f就是原文件下的所有文件的file对象,destfile就是目的地下所有文件的file对象
copyfile(f,destfile);
}
//对目的地的文件进行改名
//获取目录下的所有文件的file数组
File[] last= destiFolder.listFiles();
for(File file2:last){
String newName=file2.getName().replace(".wav", ".mp4");
File newfile=new File(destiFolder,newName);
System.out.println(newfile);
//一定要记得改file对象名,才生效。
file2.renameTo(newfile);
}
}
private static void copyfile(File f, File destfile) throws IOException {
BufferedInputStream bis=new BufferedInputStream(new FileInputStream(f));
BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream(destfile));
byte []by=new byte[1024];
int len=0;
while((len=bis.read(by))!=-1){
bos.write(by, 0, len);
}
bis.close();
bos.close();
}
}
总结:这道题容纳了file类里面的许多方法,和知识,以及包含了高效输入输出流,是一道很强的综合题,建议以后多复习。把基础打牢。才能不变应万变。
另外,我发现刚开始学的时候,其实感觉思维还是很清楚的,只是用代码去实现时,却感觉磕磕碰碰的,主要原因还是对方法不熟,对代码不熟,所以学编程还是要多练习,孰能生巧。
浙公网安备 33010602011771号