JavaSE IO、NIO

File的基本属性

String filePath = "test.txt";
File file = new File(filePath);
file.exists();			//文件是否存在
file.isFile();			//file对象指向的是否是一个文件
file.isDirectory(); 		//file对象指向的是否是一个目录(文件夹)
file.getName();			//获取file的文件名
file.getAbsolutePath();	//获取file的绝对路径
file.length();			//文件内容长度

File的基本操作

file.delete();//删除文件

//获取文件夹下的所有文件目录
String[] list = new File("test").list();//必须要有目录结构
System.out.println(list.length);	//获取目录长度
for(int i=0; i<list.length; i++) 
	System.out.println(list[i]);

//查看指定目录下存在指定名字的文件或目录
final String directory = "aaa";
String[] list = new File("test").list(new FilenameFilter() {
	@Override
	public boolean accept(File dir, String name) {
		return name.endsWith(directory);
	}
});
System.out.println(list.length);	//获取目录长度
for(int i=0; i<list.length; i++) 
	System.out.println(list[i]);

//创建一个文件
try {
	if(!file.exists()) 
		file.createNewFile();		//创建文件
} catch (IOException e) {
	e.printStackTrace();
}


IO的概念

输入流InputStream:把网络、磁盘的数据写入程序

输出流OutputStream:把程序的数据写入网络、磁盘

IO按传输分类

1.  字节流

2.  字符流


实例:文件操作Demo

// 在aaa下创建一个文件
String filename = "test.txt";
String filepath = "test/aaa/";
File file = new File(filepath + filename);

if (!file.exists()) {
	try {
		file.createNewFile();
	} catch (IOException e) {
		e.printStackTrace();
	}
}
	
BufferedWriter writer = null;
try {
	writer = new BufferedWriter(new FileWriter(file));
	
	//向文件写入内容
	writer.write("I'm a txt file...");
		
	//清除输出流
	 writer.flush();
} catch (IOException e1) {
	e1.printStackTrace();
} finally {
	try {
		writer.close();
	} catch (IOException e) {
		e.printStackTrace();
	}
}

InputStream input = null;
OutputStream output = null;
try {
	// 读入文件数据
	input = new FileInputStream(file);
		
	// 指定每次传输的数量
	byte[] data = new byte[1024];

	// 指定新文件路径
	String newPath = "test/bbb/";
	File newFile = new File(newPath + filename);

	// 定义输出流
	output = new FileOutputStream(newFile);

	// 循环输出数据
	int length = 0;
	while ((length = input.read(data)) != -1) {
		output.write(data, 0, length);
	}
			
	output.flush();

} catch (FileNotFoundException e) {
	e.printStackTrace();
} catch (IOException e) {
	e.printStackTrace();
} finally {
	try {
		input.close();
	} catch (IOException e) {
		e.printStackTrace();
	}
	try {
		output.close();
	} catch (IOException e) {
		e.printStackTrace();
	}
}

序列化与反序列化

//1.实体类实现序列化接口
public class Person implements Serializable {}
//2.序列化
File file = new File("test" + File.separator + "person.ser");
//创建输出流
OutputStream output = new FileOutputStream(file);
//OutputStream转化为ObjectOutputStream流才能进行序列化
ObjectOutputStream obStream = new ObjectOutputStream(output);		
//创建实体类
Person person = new Person("root", "123456");	
obStream.writeObject(person);		
/*
 * 反序列化
File file = new File("test" + File.separator + "person.ser");
InputStream input = new FileInputStream(file);
ObjectInputStream oiStream = new ObjectInputStream(input);
Person person = (Person) oiStream.readObject();
System.out.println(person);
*/

NIO

// 在java的NIO中,负责数据的存取,缓冲区的底层实现就是数组,用于存储不同的数据类型

String str = "abcde";
// 定义一个指定大小的缓冲区
ByteBuffer buffer = ByteBuffer.allocate(1024);
/**
 * 缓冲区的三个核心属性
 * 1.capacity():获取缓冲区容量,表示缓冲区最大存储数据的容量,一旦声明不能更改
 * 2.limit():界限,缓冲区可以操作的数据的大小(limit后的数据不能进行读写)
 * 3.position():位置,表示缓冲区正在操作数据的位置 4.
 */
System.out.println(buffer.capacity());
System.out.println(buffer.limit());
System.out.println(buffer.position());
/**
 * 缓冲区的两个核心方法 1.put():存入缓冲区数据 2.get():获取缓冲区数据
 */
buffer.put(str.getBytes());

// 将缓冲区切换成读取数据的模式才能读取
buffer.flip();
byte[] data = new byte[buffer.limit()];
System.out.println(buffer.get(data));
		
// rewind():重复读数据
buffer.rewind();
System.out.println(buffer.get(data));

//clear():清空缓冲区
buffer.clear();


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值