javaIO流其他流的练习
要求:
如c盘作业文件夹下分别有文本文档,子目录(子目录下有其他子目录和文本文档的文件)、图片格式文件。
如上涉及到的不止是文本,还有图片和子目录
所以要用到字节流FileInputStream ,FileOutputStream。当然也可以用缓冲流。
涉及多重子文件目录
需要用迭代
文件夹包括目录名和具体文件
对于目录,我们只需在路径生成就行
对于具体文件,我们要在对应的目录下面将其拷贝过去
对于抽象文件的处理,我们使用File
该类有关于文件的处理,如获取绝对路径,获取文件名等
private static void CopyDir(File filesrc, File filedest){
if(filesrc.isFile()){
//是文件先拷贝,再跳出该次递归,否则即为目录,进入目录操作。
//System.out.println(filesrc.getAbsolutePath());
//是文件就进行拷贝处理
copyfile(filesrc,filedest);
return;
}
File temFile=null;
File[] files=filesrc.listFiles();
for (File f:files) {//文件或目录
File newdest=null;
File newsrc=null;
if(f.isDirectory()){
/*当f是目录中的一个子目录时 进入*/
String name=f.getName();
String destDir=filedest.getAbsolutePath().endsWith("\\")?(filedest.getAbsolutePath()+name):(filedest.getAbsolutePath()+"\\"+name);
/*System.out.println(destDir);*/
//在拷贝路径中生成新的目录
newdest=new File(destDir);
if(!newdest.exists())
newdest.mkdirs();
/*String srcDir=f.getAbsolutePath().endsWith("\\")?f.getAbsolutePath():(f.getAbsolutePath()+"\\");*/
String srcDir=f.getAbsolutePath();
System.out.println(srcDir);
newsrc=new File(srcDir);
temFile=newdest;//更新拷贝路径
CopyDir(newsrc,temFile);
}
//temFile=newdest;
/*当目录下的是一个文件时 进入下一次循环,然后直接拷贝*/
if(!(f.isDirectory())){
CopyDir(f,filedest);
}
}
}
关于文件的拷贝涉及到的文件流,开头第一篇文章有,这里再次写一下
private static void copyfile(File src,File dest){
FileInputStream fileInputStream=null;
FileOutputStream fileOutputStream=null;
String txt=dest.getAbsolutePath().endsWith("\\")?dest.getAbsolutePath():(dest.getAbsolutePath()+"\\")+src.getName();
System.out.println(txt);
try{
fileInputStream=new FileInputStream(src);
fileOutputStream=new FileOutputStream(txt);
byte[] bytes=new byte[1024*1024];
int readcount;
while ((readcount=fileInputStream.read(bytes))!=-1){
fileOutputStream.write(bytes,0,readcount);
}
fileOutputStream.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if(fileInputStream!=null) {
try {
fileInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(fileOutputStream!=null){
try {
fileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
主函数
public static void main(String[] args) {
File filesrc=new File("C:\\Users\\wish_cai\\Pictures\\作业");
File filedest=new File("D:\\bilibili\\JJDown\\Download\\Java零基础教程视频(适合Java 0基础,Java初学入门)\\copy\\");
CopyDir(filesrc,filedest);
}