我的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);
}
}