上一篇已经简单介绍了IO流,其实阿帕奇已经提供了很多第三方jar包,已经封装了IO流的功能,为我们简化了不少代码。但是我们了解一些原理,用起这些方法来也会得心应手的。
IO流实现将一个文件夹拷贝到另一个文件夹:
思路:1.先对文件进行读取,然后在将文件写出
2 文件夹是不能复制的,只能对里面的文件进行复制
3.对文件夹我们可以进行创建。
有的需要创建本地路径, 本地路径就是 创建Fie f=new File("number.txt");//任意一个文件名即可
.
public static void copy(File source,File ss){
//这个是为了创建文件
int count=0;
File des=new File(ss,source.getName());
des.mkdirs();//G:\\英语\\学习
File[] listFiles = source.listFiles();
FileInputStream fis=null;
FileOutputStream fos=null;
for (File file : listFiles) {
if(file.isDirectory()){
copy(file,des); //进行递归,遍历里面的文件
}else{ //如果是文件向下执行
try {
//进行文件复制
fis=new FileInputStream(file); //H:\\学习
fos=new FileOutputStream(new File(des,file.getName()));//进行文件复制时源文件与目标文件文件结尾是相同的
byte[] b=new byte[1024]; //是以字节数组进行读取,比起一个字节一个字节的读,加快了速度
int len=0;
while((len=fis.read(b))!=-1){
fos.write(b,0,len);
}
} catch (Exception e) {
// TODO: handle exception
}finally {
try {
fos.close();
fis.close();
}
如果这些不懂也没有关系,因为一些第三方jar包已经提供了这些功能。
引进commons-io.jar
1.加入classpath的第三方jar包内的class文件才能在项目中使用,创建lib文件夹,将commons-io.jar拷贝到lib文件夹。
2.右键点击commons-io.jar,Build Path→Add to Build Pat
它提供了一个处理文件操作的类:FilenameUtils。因为里面定义的是静态方法,可以直接使用类里面的方法。
常用方法:
getExtension(String path) 获取文件的扩展名
getName() 获取文件名
isExtention 判断fileName是否以某个后缀名结尾
readFileToString(File file):读取文件内容,并返回一个String;
writeStringToFile(File file,String content):将内容content写入到file中;
copyDirectoryToDirectory(File srcDir,File destDir);文件夹复制
copyFile(File srcFile,File destFile);文件夹复制
在项目中我们可能会涉及到上传文档的问题,有的会有要求,上传的文档不能超过多大,我们需要知道1KB就是1024。如果想要控制上传的扩展名,我们可以用getExtension来获取。