Java的IO_20CommonsIO

组件与框架的关系

java代码编译为class文件,多个class文件打包成jar包,多个jar包放到一起是组件,在组件上加入自己的代码是框架
组件:可以选择——主动
框架:用的是思想——被动

CommonsIO

该组件是"apache.org"——阿帕奇中的一员,是IO的工具集
在编译器中需要拷贝:
commons-io-2.6.jar
commons-io-2.6-sources.jar
具体压缩包请去官网下载CommonsIO官网快速进入

FileUtils

统计文件和目录大小

package com.mm.ax;

import java.io.File;
import org.apache.commons.io.FileUtils;


public class test1 {

	public static void main(String[] args) {
		//文件大小
		long len =FileUtils.sizeOf(new File("src\\com\\mm\\ax\\test1.java"));
		System.out.println(len);
		//目录大小
		len = FileUtils.sizeOf(new File("D:\\EclipsePlace\\CommonIO"));
		System.out.println(len);
	}

}

其中的FileUtils.sizeOf的源码如下:

 public static long sizeOf(final File file) {

        if (!file.exists()) {
            final String message = file + " does not exist";
            throw new IllegalArgumentException(message);
        }

        if (file.isDirectory()) {
            return sizeOfDirectory0(file); // private method; expects directory
        } else {
            return file.length();
        }

    }

如果是目录:(用的是递归)

private static long sizeOfDirectory0(final File directory) {
        final File[] files = directory.listFiles();
        if (files == null) {  // null if security restricted
            return 0L;
        }
        long size = 0;

        for (final File file : files) {
            try {
                if (!isSymlink(file)) {
                    size += sizeOf0(file); // internal method
                    if (size < 0) {
                        break;
                    }
                }
            } catch (final IOException ioe) {
                // Ignore exceptions caught when asking if a File is a symlink.
            }
        }

        return size;
    }

列出子孙级文件

package com.mm.ax;

import java.io.File;
import java.util.Collection;

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.filefilter.DirectoryFileFilter;
import org.apache.commons.io.filefilter.EmptyFileFilter;
import org.apache.commons.io.filefilter.FileFilterUtils;
import org.apache.commons.io.filefilter.SuffixFileFilter;

/**
 * 列出子孙级
 */
public class test2 {

	public static void main(String[] args) {
		//目录,过滤后缀,文件夹的目录
		Collection<File> files =FileUtils.listFiles(new File("D:/EclipsePlace/CommonIO"),
		EmptyFileFilter.NOT_EMPTY, null);//内容非空:EmptyFileFilter.NOT_EMPTY
		
		for (File file : files) {
			System.out.println(file.getAbsolutePath());
		}
		System.out.println("---------------------");
		 files =FileUtils.listFiles(new File("D:/EclipsePlace/CommonIO"),
		EmptyFileFilter.NOT_EMPTY, DirectoryFileFilter.INSTANCE);
		 //子孙级:DirectoryFileFilter
		for (File file : files) {
			System.out.println(file.getAbsolutePath());
		}
		System.out.println("---------------------");
		 files =FileUtils.listFiles(new File("D:/EclipsePlace/CommonIO"),
		new SuffixFileFilter("java"), DirectoryFileFilter.INSTANCE);
		 //文件后缀是.java
		for (File file : files) {
			System.out.println(file.getAbsolutePath());
		}
		System.out.println("---------------------");
		 files =FileUtils.listFiles(new File("D:/EclipsePlace/CommonIO"),
					FileFilterUtils.or(new SuffixFileFilter("java"),
			new SuffixFileFilter("class"),EmptyFileFilter.EMPTY), DirectoryFileFilter.INSTANCE);
		//既要.java又要.class
		 for (File file : files) {
			System.out.println(file.getAbsolutePath());
		}
		
		System.out.println("---------------------");
		 files =FileUtils.listFiles(new File("D:/EclipsePlace/CommonIO"),
					FileFilterUtils.and(new SuffixFileFilter("java"),
		EmptyFileFilter.NOT_EMPTY), DirectoryFileFilter.INSTANCE);
		 //不为空且为java文件
		for (File file : files) {
			System.out.println(file.getAbsolutePath());
		}
	}

}

读取文件内容

package com.mm.ax;

import java.io.File;
import java.io.IOException;
import java.util.List;

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.LineIterator;

/**
 * 读取内容

 */
public class test3 {

	public static void main(String[] args) throws IOException {
		//读取文件
		String msg =FileUtils.readFileToString(new File("dest.txt"),"UTF-8");
		System.out.println(msg);
		//用字节数组读取
		byte[] datas = FileUtils.readFileToByteArray(new File("dest.txt"));
		System.out.println(datas.length);
		
		//逐行读取——每行放入容器中
		 List<String> msgs= FileUtils.readLines(new File("dest.txt"),"UTF-8");
		 for (String string : msgs) {
			System.out.println(string);
		}
		
		//类似于迭代器
		LineIterator it =FileUtils.lineIterator(new File("dest.txt"),"UTF-8");
		while(it.hasNext()) {
			System.out.println(it.nextLine());
		}
		
	}

}

写出文件内容

package com.mm.ax;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.io.FileUtils;

/**
 * 写出内容
 */
public class test4 {

	public static void main(String[] args) throws IOException {
		//写出文件——从头开始写出
		FileUtils.write(new File("study.txt"), "建立了新文件\n","GBK");
		//追加内容
		FileUtils.writeStringToFile(new File("study.txt"), "建立了新文件\n","GBK",true);
		//字节数组——追加内容
		FileUtils.writeByteArrayToFile(new File("study.txt"), 
		"建立了新文件\n".getBytes("GBK"),true);
		
		//写出列表
		List<String> datas =new ArrayList<String>();
		datas.add("代红1");
		datas.add("代红2");
		datas.add("代红3");
		
		FileUtils.writeLines(new File("study.txt"), datas,"————————",true);
		//第二个参数是列表,第三个参数是条目之间的连接符
	}

}

拷贝文件

 package com.mm.ax;

import java.io.File;
import java.io.IOException;
import java.net.URL;

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;

/**
 * 拷贝
 */
public class test5 {

	public static void main(String[] args) throws IOException {
		//复制文件
		FileUtils.copyFile(new File("内存泄漏.JPG"),new File("copy.JPG"));
		//复制文件到目录
		FileUtils.copyFileToDirectory(new File("内存泄漏.JPG"),new File("lib"));
		//复制目录到目录——第一个参数作为第二个参数的子目录
		FileUtils.copyDirectoryToDirectory(new File("lib"),new File("libs"));
		//复制目录
		FileUtils.copyDirectory(new File("lib"),new File("libs"));
		//拷贝URL内容——第一个参数是图片的路径,第二个参数是取一个名字
		String url ="https://ps.ssl.qhimg.com/sdmt/270_162_100
		/t0187f7f6d0515b56ae.webp";
		FileUtils.copyURLToFile(new URL(url), new File("picture.jpg"));
		//读取字符串的内容——需要指定字符集
		String datas =IOUtils.toString(new URL("http://www.baidu.com"), "UTF-8");
		System.out.println(datas);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值