IO流的使用目录
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
目录
一、file是什么?
File 类 就是当前系统中 文件或者文件夹的抽象表示
通俗的讲 就是 使用File对象 来操作我们电脑系统中的文件或者文件夹
学习File类 其实就是学习 如果通过file对象 对系统中的文件/文件夹进行增删改查
二、File使用步骤
1.1创建File对象
代码如下(示例):创建一个File对象 并指定文件得路径 \转移字符串
File file01 = new File("D:\\AAA\\aaa.txt");
1.2添加数据
代码如下(示例):
public static void main(String[] args) throws IOException {
File file01 = new File("D:\\AAA\\aaa.txt");
file01.createNewFile();
File file02 = new File("D:\\AAA\\bbb");
file02.mkdir();
File file03 = new File("D:\\AAA\\ccc\\ddd");
file03.mkdirs();
}
createNewFile();创建File对象 mkdir(); 创建目录 make directory 单层目录 .mkdirs(); 创建多层目录
1.3查询数据
代码如下(示例):
public class Java003File_chaxun {
public static void main(String[] args) throws IOException {
File file= new File("D:\\AAA\\ccc\\ddd");
String name = file.getName();
System.out.println("name:"+name);
String parent = file.getParent();
System.out.println("父级"+parent);
String path = file.getPath();
System.out.println("文件路径"+path);
File file1= new File("D:\\AAA");
String[] strings = file.list();
System.out.println(Arrays.toString(strings));
File[] files = file1.listFiles();
for(File f:files){
System.out.println(f.toString());
}
getName(); //得到文件得名称 getParent(); //得到父级路径得名称 getPath(); //得到文件得路径名称 isFile(); //判断该文件对象是否为文件类型 isDirectory(); //判断该文件对象是否为目录类型 String[] list = file2.list(); //列出目录下所有子文件得名称 File[] files = file2.listFiles(); //列出AAA目录下所有文件对象
1.4删除数据
代码如下(示例):
public static void main(String[] args) throws IOException {
File file01 = new File("D:\\AAA\\aaa.txt");
file01.createNewFile();
File file02 = new File("D:\\AAA\\bbb");
file02.mkdir();
File file03 = new File("D:\\AAA\\ccc\\ddd");
file03.mkdirs();
file01.delete();
file02.deleteOnExit();
file03.delete();
delete();//删除文件 deleteOnExit(); // 当程序退出后 删除
1.5修改数据
代码如下(示例):
public static void main(String[] args) throws IOException {
File file01 = new File("D:\\AAA\\aaa.txt");
file01.createNewFile();
File file02 = new File("D:\\AAA\\bbb");
file02.mkdir();
File file03 = new File("D:\\AAA\\ccc\\ddd");
file03.mkdirs();
file01.setWritable(false);
file01.setReadOnly();
setReadable(false);//设置该文件得权限为不能读 setWritable(false);//设置该文件不能写 setReadOnly();//设置只读得权限 renameTo(new File("D:/AAA/d.txt"));//重命名
三、IO流使用步骤
1.1Writer字符输出流
字符输出流 ---指定对哪个文件(路径)进行写操作
public static void main(String[] args) throws IOException {
Writer writer = new FileWriter("D:\\AAA\\b.txt");
String string="123456";
writer.write(string);
writer.flush();
writer.close();
}
writer.flush//刷新流
writer.close(); //关闭流资源
上面每次往文件中写内容时 就会把原来的内容覆盖了。 追加内容,在文件地址后加(,true)
Writer writer = new FileWriter("D:\\AAA\\b.txt",true);
1.2 Reader字符输入流
作用:就是读取b.txt里的内容
public static void main(String[] args) throws Exception{
Reader reader = new FileReader("D:\\AAA\\b.txt");
int a=0;
char[] chars=new char[10];
while( (a=reader.read(chars)) !=-1 ){
String str=new String(chars,0,a);
System.out.print(str);
}
}
字节输出流--OutputStream
它可以对任意文件进行操作,对文件进行输出操作。以字节为单位。 它是所有字节输出流的父类,
字节输入流---InputStream
它可以对任意文件进行读操作 ,以字节为单位,它是所有字节输入流的父类
缓存流
缓存流是在基础流[InputStream OutputStream Reader Writer]之上 添加了一个缓存池功能
BufferInutStream BufferOutputStream BufferReader BufferWriter 提高IO的效率,降低IO的次数。
@Test
public void TestBuffer() throws Exception{
OutputStream out=new FileOutputStream("D:/AAA/g.txt");
BufferedOutputStream bos=new BufferedOutputStream(out);//缓存流要作用再基础流上
String str="abcdefhijglmn";
byte[] bytes = str.getBytes();
bos.write(bytes); //因为你写的内容 暂时放入缓存池中 并没有直接放入文件中。 所以文件中没有你的内容。
//bos.flush();//刷新缓存池---把池子中的内容输入到文件上
bos.close(); //关闭----先刷新缓冲池 再关闭流资源
}
理解对象流及序列化机制
1.对象流作用
用于存储和读取基本数据类型数据或对象的处理流。它的强大之处就是可以把Java中的对象写入到文件源中(序列化),也能把对象从文件源中还原回来(反序列化)
2.序列化机制理解
首先我们要了解什么是序列化机制?
对象序列化机制允许把内存中的Java对象转换成平台无关的二进制流,从而允许把这种二进制流持久地保存在磁盘上,或通过网络将这种二进制流传输到另一个网络节点。
当其它程序获取了这种二进制流,就可以恢复成原来的Java对象
序列化:用ObjectOutputStream类保存基本类型数据或对象的机制
反序列化:用ObjectInputStream类读取基本类型数据或对象的机制
注意:ObjectOutputStream和ObjectInputStream不能序列化static和transient修饰的成员变量
用来表明类的不同版本间的兼容性。
简言之,其目的是以序列化对象进行版本控制,有关各版本反序列化时是否兼容。
如果类没有显示定义这个静态常量,它的值是Java运行时环境根据类的内部细节自
动生成的。若类的实例变量做了修改,serialVersionUID 可能发生变化。故建议,
显式声明。
3.序列化机制的好处
可将任何实现了Serializable接口的对象转化为字节数据,使其在保存和传输时可被还原
4.序列化注意事项
首先,如果需要让某个对象支持序列化机制,则必须让对象所属的类及其属性是可
序列化的,为了让某个类是可序列化的,该类必须实现如下两个接口之一。
Serializable(主要实现这个接口)
Externalizable
否则,会抛出NotSerializableException异常
凡是实现Serializable接口的类都有一个表示序列化版本标识符的静态变量:
二、操作步骤
1.使用对象流序列化操作
1. 创建节点输出流(FileOutputStream)
2. 创建对象流(ObjectOutputStream)
3. 调用 ObjectOutputStream 对象的 writeObject(对象) 方法输出可序列化对象
4. 注意写出一次,操作flush()一次
5. 关闭流
@Test //存档:----序列化:
public void testObjectStream() throws Exception{
OutputStream out=new FileOutputStream("D:/AAA/a.txt");
//对象输出流
ObjectOutputStream oos=new ObjectOutputStream(out);
//使用对象输出流调用输出方法 输出的类对象 该类必须实现Serializable 序列化接口
Role r=new Role("吕布","7级",1,"弑父");
oos.writeObject(r);
oos.close();
}
//测试 读档: ----反序列化:
@Test
public void testObjectStream2()throws Exception{
InputStream input=new FileInputStream("D:/AAA/a.txt");
ObjectInputStream ois=new ObjectInputStream(input);
Object o = ois.readObject();
System.out.println(o);
ois.close();
}
总结
以上就是今天要讲的内容,本文仅仅简单介绍了IO流的使用