File类的使用
一。获取目录下的所有文件名
public class FileTest03 {
public static void main(String[] args) {
File file = new File("D:/JAVA/copy");
FileTest03.getFileName(file);
}
//使用递归获取指定目录下的所有文件名
public static void getFileName(File file){
if(file.isFile()){
System.out.println(file.getName());
}else{
File[] files=file.listFiles();
for(File file1:files){
getFileName(file1);
}
}
}
}
二。拷贝目录
**
* 拷贝目录
*/
public class CopyDirs {
public static void main(String[] args) {
//将D盘的copy目录复制到D盘,要求D盘这个目录结构没有copy目录,如果有要先删除
File source=new File("D:/JAVA/copy");
File target=new File("C:/JAVA");
copy(source,target);
}
public static void copy(File f1,File f2){
if(f1.isFile()){
fileCopy(f1.getPath(),f2.getPath()+"/"+f1.getName());
System.out.println("拷贝 "+f1.getPath()+" 成功");
return;
}
if(f1.isDirectory()){
File dir=new File(f2.getPath()+"/"+f1.getName());
if(!dir.exists()){
dir.mkdirs();
System.out.println("创建目录 "+dir.getPath()+" 成功");
File[] files=f1.listFiles();
for(File file:files){
copy(file,new File(dir.getPath()));
}
}
}
}
//复制文件
public static void fileCopy(String sourcePath,String targetPath){
FileInputStream sourceFis=null;
FileOutputStream targetFos=null;
try {
sourceFis=new FileInputStream(sourcePath);
targetFos=new FileOutputStream(targetPath);
int readCount=0;
byte[] bytes=new byte[1024*1024];//一次读取1MB
while((readCount=sourceFis.read(bytes))!=-1){
targetFos.write(bytes,0,readCount);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
if(sourceFis!=null){{
try {
sourceFis.close();
} catch (IOException e) {
e.printStackTrace();
}
}}
if(targetFos!=null){
try {
targetFos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}