309 复制单级文件夹
单级文件夹,就是内部不含文件夹的文件夹,【文件夹套文件夹体系】的最底层
多级文件夹,内部包含文件夹的文件夹,【文件夹套文件夹体系】的非最底层
【思路】
(准备)(新建一个空文件夹,C:\develper\309)
(因为要复制目录、图片,因此采用字节流而不是字符流)
- 创建 数据源目录File对象
- 获取 数据源目录File对象的名称(复用原文件名)
- 创建 目的地目录File对象
- 判断 目的地目录的File是否存在,不存在则创建
- 获取 数据源目录下的所有文件的File数组
- 遍历 File数组,得到每一个File对象(这就是数据源)(以图片文件为例)
- 获取 数据源文件File对象的文件名
- 创建 目的地文件File对象,路径名包含文件名
- 复制 文件
【报错了】
File[] fileArray = srcFolder.listFiles();报错NullPointerException,应该是因为srcFolder目前是空文件夹,没有文件夹或文件
srcFolder应该是空的吗?回看视频确认一下
视频里是itcast文件夹,内含3个文件。。。
故修改Prepare类,在srcFolder内补充3个文件应该就可以了,
还是不行,还是那个报错,
回看视频检查代码
好了,是操作代码里路径没更新为修改后的路径
【关键语句】
File.mkdir() | 新建文件夹 |
File.createNewFile() | 新建文件 |
File[] arrayName=fileName.listFiles() | 创建File对象数组 (对象也可以作为元素组成数组) (listFiles方法返回目录中的文件和目录的File对象数组) |
for(File fileName:arrayName){ String sName=fileName.getName(); File fileName=new File(fileName,sName); methodName(fileName,fileName); } | 复制单级目录的全部数据 for(类型是对象 对象名:数组名){ String sName=fileName.getName();获取文件名 File fileName=new File(fileName,sName);使用原名称创建新文件 methodName(fileName,fileName);调用自己定义的方法,给的参数分别是数据源File对象、目的地File对象 }, |
byte[] bys=new byte[1024]; int i; while((len=bis.read())!=-1){ bos.write(bys,0,i); } | (这是在methodName方法体内的)(使用数组方式)读and写数据源 |
File.mkdir新建文件夹
File.createNewFile新建文件
File.mkdir(),新建文件夹
File[] arrayName=fileName.listFiles(),创建File对象数组
,
--------------------------------------------------------------
package e309;
import java.io.File;
import java.io.IOException;
public class Prepare {
public static void main(String[] args) throws IOException {
File f = new File("C:\\develper\\309");
f.mkdir();
File f1 = new File("C:\\develper\\309\\jj.jpg");
f1.createNewFile();
File f2 = new File("C:\\develper\\309\\jj.png");
f2.createNewFile();
File f3 = new File("C:\\develper\\309\\jj.txt");
f3.createNewFile();
}
}
--------------------------------------------------------------
package e309;
import java.io.*;
public class CopyEmptyFolderDemo {
public static void main(String[] args) throws IOException {
File srcFolder = new File("C:\\develper\\309");
// 数据源
String srcFolderName = srcFolder.getName();
// 原文件名
File destFolder = new File("myCharStream\\src\\e309", srcFolderName);
if (!destFolder.exists()) {
destFolder.mkdir();
}
// 判断目的地目录是否存在,不存在则复制
File[] fileArray = srcFolder.listFiles();//!!!
// 创建file数组,listFiles()返回目录中的文件和目录的File对象数组
for (File srcFile : fileArray) {
String srcFileName = srcFile.getName();//???no need
File destFile = new File(destFolder, srcFileName);
copyFile(srcFile, destFile);//调用还没有定义的方法,方法名飘红报错,这时选中方法名按alt enter可快捷生成方法声明语句
}
// 调用copyFile方法 读数据源,写入目的地 实现复制文件
}
private static void copyFile(File srcFile, File destFile) throws IOException {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFile));//fis的数据源可以是字符串的路径,也可以是一个标识符
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destFile));
byte[] bys = new byte[1024];
int len;
while ((len = bis.read()) != -1) {
bos.write(bys, 0, len);
}
bis.close();
bos.close();
}
// 定义copyFile方法 读数据源,写入目的地
}