Java学习笔记之IO流

本文详细介绍了Java中的IO流,包括File类的基本操作,如获取文件属性、创建和删除文件,以及字节流和字符流的区别。示例代码演示了FileReader和FileWriter的使用,以及对象的序列化和反序列化。此外,还展示了如何通过Properties类解析资源文件。
摘要由CSDN通过智能技术生成

我的Java学习笔记

IO流



IO流

1.File类

String path="D:/test/test1/c.txt";
		File file = new File(path);
		//1.获取文件的名字
		System.out.println("文件的名字是"+file.getName());
		
		//2.获取文件的路径
		System.out.println("文件的路径是"+file.getPath());
		
		//3.获取文件的上一级目录
		System.out.println(file.getParent());
		
		//4.判断file对象是否是一个文件
		boolean file2 = file.isFile();
		
		//5.判断file对象是否是一个目录
		boolean directory = file.isDirectory();
		
		//6.判断文件是否是隐藏文件
		boolean hidden = file.isHidden();
		
		//7.判断文件是否存在  存在返回false  不存在创建新的文件 返回true
		//当路径不存在的时候  创建失败并且报错
		file.createNewFile();
		
		//8. 删除文件或者目录
		file.delete();
		
		//9.判断目录或者文件是否存在
		boolean exists = file.exists();
		
		//10.返回文件最后的修改时间
		long lastModified = file.lastModified();
		
		//11.获取文件的大小(B)
		long length = file.length();
		
		//12.获取目录下所有的目录和文件(String)
		String[] list = file.list();
		
		//13.获取目录下所有的目录和文件(File)
		File[] listFiles = file.listFiles();
		
		//14.创建目录  如果路径中有不存在的父级 那么创建失败
		file.mkdir();
		
		//15.创建目录  如果路径中有不存在的父级   连父级的目录一并创建
		file.mkdirs();

2.流的概念和作用

​ 流:代表任何可以产生数据的数据源对象,或者是可以接受数据的接收端对象

​ 作用:为数据源和目的地建立一个输送通道

3.IO的分类

3.1 根据数据流的方向

​ 输入流:从别的地方获取资源,输入到程序中

​ 输出流:从程序中输出到本地文件

3.2 根据处理数据单位

​ 1个字符等于两个字节。一个汉字占用两个字节

​ 字节流:每次读取(写出)一个字节。操作中文会乱码

​ 字符流:每次读取(写出)一个字符。操作中文不会出现问题

4.二进制流

​ FileInputStream

File file = new File("D:/a.txt");
if(!file.exists()) {
	file.createNewFile();
}
FileInputStream inputStream = new FileInputStream(file);
//获取文件的字节数
int length = inputStream.available();
byte[] bs = new byte [length];
//把数据输入到byte数组中
int read = inputStream.read(bs);
inputStream.close();
String string = new String(bs);
System.out.println(string);

​ FileOutputStream

String path = "D:/test/test2/b.txt";
		File file = new File(path);
		if(!file.isFile()) {//判断文件是否存在
			String parentpath = file.getParent();
			File file2 = new File(parentpath);
			if(!file2.isDirectory()) {//判断父类的目录是否存在
				file2.mkdirs();//创建目录
				file.createNewFile();//创建文件
			}
		}
		//不管文件存在不存在  到这里文件都已经存在了
		String s="TextComponent";
		FileOutputStream outputStream = new FileOutputStream(file);
		byte[] bs = s.getBytes();
		outputStream.write(bs);
		outputStream.close();

使用输入输出流完成复制文件的操作

public class CopyFileTest {
	public static void main(String[] args) throws Exception {
		//把D:a.txt文件复制到D:/test/test1/a.txt
		FileInputStream inputStream = new FileInputStream(new File("D:/a.txt"));
		File outfile = new File("D:/test/test2/a.txt");
		//创建复制后的 
		outfile.createNewFile();
		FileOutputStream outputStream = new FileOutputStream(outfile);
		//使用输入流完成数据的接收
		int length = inputStream.available();
		byte [] bs = new byte [length];
		inputStream.read(bs);
		outputStream.write(bs);
		inputStream.close();
		outputStream.close();
	}
}

5.FileReader和FileWriter

FileReader fileReader = new FileReader(new File("D:/a.txt"));
		char [] cs = new char[1024];// 1026    1024   2
		int i=0;
		while((i = fileReader.read(cs))!=-1) {
			String s = new String(cs, 0, i);
			System.out.println(s);
		}
FileWriter fileWriter = new FileWriter(new File("D:/b.txt"),true);
//new FileWriter(File)  如果只有File对象,那么每次写入都会覆盖原有的数据
//new FileWriter(File,boolean)  如果需要追加写入,需要添加一个true参数
		String s="asdsd6";
		fileWriter.write(s);
		fileWriter.close();

6.对象的序列化和反序列化

6.1 对象序列化概念

​ 序列化对象:将Java对象的状态信息存储到硬盘中的过程;

​ 序列化对象的逆向操作就是反序列化。

6.2 对象的序列化

​ 实例化对象的类需要实现Serializable接口

public class User implements Serializable{
    //需要实现Serializable接口
} 

使用ObjectOutputStream流完成序列化

System.out.println("请输入用户名");
String username = sc.next();
System.out.println("请输入密码");
String userpwd = sc.next();
User user = new User();
user.setUsername(username);
user.setUserpwd(userpwd);
File file = new File("D:/userinfo.txt");
ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(file)); 
objectOutputStream.writeObject(user);
objectOutputStream.close();

使用ObjectInputStream完成反序列化

ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(file));
User user = (User)objectInputStream.readObject();
objectInputStream.close();
if(user.getUsername().equals(username)&&user.getUserpwd().equals(userpwd)) {
	System.out.println("登录成功");
}else {
	System.out.println("账号密码不匹配");
}

7.资源文件

创建资源文件

bankCardNum=45181101550500051
bankUserName=XXX
bankName=招商银行
bankPwd=1245433
//bankinfo.properties 文件名

使用流和Properties类完成资源文件的解析

public class Pripertiestest {
	public static void main(String[] args) throws Exception {
		FileInputStream in = new FileInputStream(new File("D:/bankinfo.properties"));
		InputStreamReader ins = new InputStreamReader(in, "UTF-8");
		Properties pt = new Properties();
		pt.load(ins);
		String cnum = pt.getProperty("bankCardNum");
		String uname = pt.getProperty("bankUserName");
		String bname = pt.getProperty("bankName");
		String upwd = pt.getProperty("bankPwd");
		System.out.println(cnum);
		System.out.println(uname);
		System.out.println(bname);
		System.out.println(upwd);
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值