Java带你去看流浪世界!(十七)

《File IO》

学习阶段存储方式的演变:

临时存储:变量—>数组—>对象—>对象数组—>集合【最常用的程序内临时存储的顶级存储方式】

持久化存储:文件

文件的概念:相关记录或者放在一起的数据的集合。它是需要存储在“长期存储”的设备上的,有了它我们就可以实现持久化存储。

一、使用File类操作文件或目录的属性

File类是java.io包下,可以实现对文件/文件夹(目录directory)的操作。

构建一个File对象
main(){
    File file = new file("d:/xx/test.txt");
    //文件
    String path = "d:/test.txt";
    //文件夹
    String path = "d:/aaa";
    File file = new File(path);
}
File的构造方法:
1.File(String pathname)直接根据字符串类型地址获取对象的文件对象

2.File(String parent,String child)根据字符串类型的父路径和子路径获取对应的文件对象

3.File(File parent,String child)根据文件类型的父路径和字符串的子路径获取对应的文件对象
main{
    /*1.File(String pathname)
    File file = new File("d:\\a.txt");*/
    
    /*2.File(String parent父路径,String child子路径)
    //通常应用于:你已经获取到了某个文件的父路径,然后只需要通过本构造即可实现路径自动拼接
    File file = new File("d:","a.txt");*/
    
    /*3.File(File parent,String child)
    //通常应用于:你已经后去到了某个文件的父路径(File对象型的)...
    File parent = new File("d:");
    File file = new File(parent,"a.txt");*/
    syso(file.length());
}
File常用的API:
1.boolean.exists()--->查找文件是否存在,有true,没有false

2.boolean.isFile()--->用于判断是否是文件

3.boolean.isDirectory()--->用于判断是否是目录,有true,没有false

4.String.getPath()---->获得相对路径

5.String.getAbsolutePathD()--->获得绝对路径

6.String.getName()--->获得文件名

7.delete()---->删除文件/空的文件夹

8.boolean.createNewFlie()---->创建空文件,不创键文件夹

9.long.length()----->查看文件大小

10.boolean.mkdir()/ mkdirs()--->新建文件和文件夹

11.File[] listFiles()--->获取文件夹下的所有子目录/文件
展示各种方法:文件类的操作
class{
    //创建文件
    public void create(File file){
        if(!file.exists()){
            try{
               file.createNewFile();
                syso("文件已创建");
            }catch(IOException){
                e.printStackTrace();
            }
        }
    }
 	//查看文件相关信息
    public void showFileInfo(File file){
        if(file.exists()){
             //如果文件存在,则查看其信息
            if(file.isFile()){
            	syso(file.getName());//查看文件名
           		syso(file.getPath());//查看相对路径:类似于../demo1/testConstructor.java
            	syso(file.getAbsolutePath());//查看绝对路径:一个固定的地址,可以根据这个地址找到文件 d:/a.text
               	syso(file.length());//查看文件大小
            }
            if(file.isDirectory()){
                syso("此文件是目录")
            }
        }else{
            syso("文件不存在!")
        }
    }
    //删除文件
    public void delete(File flie){
        if(file.exists()){
            file.delete();
            syso("文件已删除")
        }
    }
    main{
        FileDemo fileDemo = new FileDemo();
        File file = new File("d:/chengxuan/test.txt");
        fileDemo.create(file);
    }

二、流(Stream):OutputStream/inputStream

1.流的概念

流是指:一串字节以先进先出的方式发送和接受数据的通道

1.流动性:根据方向的不同,进行先进先出如同流水一样的动性。

2.方向性:相对于程序为参照物,流是有读取和写入操作,是有方向的。
2.流的分类
1.根据流向分为:

	输入流:读	InputStream

	输出流:写	OutputStream

2.根据数据处理单元分为:

	1.字节流:可以用来传输一切内容。音频,视频,图片,文本....	根据美国ASCII码进行通信传输的

		字节输入流 InputStream	字节输出流  OutputStream

	2.字符流:可以用来传输文本内容	根据不同国家进行了相应文字转换(它是基于字节流产生的)

		字符输入流 Reader	字符输出流 Writer
3.Reader和Writer的区别
Reader: 字符输入流,继承自Reader的流都是用于向程序中输入数据的。

Writer :字符输出流,继承Writer的流都是向程序中输出的。

基类是抽象类无法创建对象,所以需要寻找对应的子类。

4.InputStream和OutputSteam的区别
InputStream 字节输入流:继承自InputStream的流都是用于向程序中输入数据的。

OutputStream 字节输出流 :继承自OutputStream的流是程序用于向外输出数据的。
5.流的方向是以内存为参照物

三、字节流(byte表示字节)

1.FileInputStream / FileOutputStream

FileInputStream:

	1.int.read()--->读取一个字节数据

	2.int read(byte[] b)--->读取一个字节数组长度的字节数据,返回世界速去到的字节数量

	3.int read(byte[] b, off, int len)--->读取输入流中从指定索引开始,指定长度的字节数据到字节数组中

	4.int close();--->关流
//从输入流中指定位置开始,读取指定长度的字节数据到字节数组中
//p1:字节数组p2:起始索引p3:长度
//read(byte b[], int off(offs), int len)
FileInputStream fis = new FileInputStream("d:/test.txt");
//方法
byte[] b = new byte[1024];
int read = fis.read();
int read = fis.read(b,0,7);
//关流
try{
    
}catch(异常){
    
}finally{
    if(fis != null){
        fis.close();
    }
}

FileOutputStream:

1.void write(int b)--->输出一个字节

2.void write(byte[] b)--->输出一个字节数组的内容

3.void write(byte[] b, off, int len)--->输出一个字节数组中的指定范围的内容

4.void close();--->关流
main{
    FileOutputStream fos = null;
    try{
        //1.根据File对象来构建输出流对象
    	/*File file = new File("d:/b.txt");
    	FileOutputStream fos = new FileOutputStream(file);*/
       //2.根据文件路径来构建输出流对象 
        /*FileOutputStream fos = new FileOutputStream("d;/b.txt");*/
        //3.想指定文件追加数据p1:文件地址/File对象 p2:是否追加数据
        /*FileOutputStream fos = new FileOutputStream("d;/b.txt",true);*/
    }catch(Exception e){
        e.printStackTrace();
    }finally{
        //关流
        if(fos != null){
            fos.close();
        }
    }
}
//2.API方法
/*write(int b) 输出一个字节ASCII码
fos.write(97);*/
/*write(byte b[])输出一个字节数组的内容
String str = "hello whord";
fos.write(str.getBytes());*/
/*write(byte b[], int off, int len)输出一个字节数组内指定索引开始,指定长度结束
String str = "hello whord";
fos.write(str.getBytes(), 13,6);*/


2.文件复制(任意文件)

//将一个文件,复制到一个文件夹下
FileInputStream fis = new FileInputStream("d:/test.txt");
fos = new FileOutputStream("c:/a.txt")
//用数组来存储
byte[] bs = new byte[3];
while(fis.read(bs) > 0){
    syso(xxxx有数据);
}
int n = fis.read();//读第一个字符
n = fis.read();//读下一个字符
syso(n);
//关流
fis.close();

四、字符流

字符流的基类:
Reader

Writer
1.FileReader/FileWriter
构造:
**输入流**

FileReader(File file);

FileReader(String pathname);

**输出流**

FileWrite(File file);

FileWriter(String pathname);

FileWriter(String/File pathname, boolean append);追加数据
常用方法:
**输入流**

int read(char[] buffer);读取数据到字符数组中,返回读取的字符数

int read(char[] buffer, int offset, int len);读取指定长度的字符数据到数组中,返回读取的字符数

**输出流**

void write(String str);输出一个字符串

void write(String str, int offset, int len);输出一个字符串的一部分

void write(char[] buffer);输出一个字符数组

void write(char[] buffer, int offset, in len);输出一个字符数的一部分

关流方法:void close();在try-catch中可以通过try()形式自动关流,但是关流的时候是程序结束时自动关流。

.flush();清空缓冲区内容。BufferedWrite会清空两个缓冲区(一个是它自带的,一个是字符流的)

关流就是在清空缓冲区。

2.BufferedWriter / BufferedReader
构造:
**输入流**

BufferedReader(Reader re);

**输出流**

BufferedWrite(write wr);
常用方法:
**输入流**

String readLine();读取一行数据

其他同普通字符输入流,但是比之更加高效。

**输出流**

方法基本和普通字符输出流一样,但是比之更加高效(都是重新重写自Writer类的相关方法)
1.自带缓冲区更高效

2.对换行符做了处理,可以readLine() / newLine()

3.是对FileReader、FileWriter的封装

3.读写文本文件

五、读写二进制文件

1.将内存中的基本数据已二进制的形式写入文件或者读取出来

2.DataInputStream / DataOutputStream

3.peadLong() / readByte() / readUTF() / readChar()

4.写入同上

六、序列化和反序列化

1.序列化就是将对象的状态存储到特定介质中的过程,反之就叫反序列化

2.序列化又叫串行化,这样使得对象数据可以创术或者永久保存在文件中,且与平台无关

3.DataInputStream也可以实现序列化效果,将数据一个一个写入

4.实现了java.io.Serializable接口的类对象才能被序列化,即可序列化接口

5.ObjectOutputStream / O

bjectInputStream一次可以写入一个对象

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
未来社区的建设背景和需求分析指出,随着智能经济、大数据、人工智能、物联网、区块链、云计算等技术的发展,社区服务正朝着数字化、智能化转型。社区服务渠道由分散向统一融合转变,服务内容由通用庞杂向个性化、服务导向转变。未来社区将构建数字化生态,实现数据在线、组织在线、服务在线、产品智能和决策智能,赋能企业创新,同时注重人才培养和科研平台建设。 规划设计方面,未来社区将基于居民需求,打造以服务为中心的社区管理模式。通过统一的服务平台和应用,实现服务内容的整合和优化,提供灵活多样的服务方式,如推送式、订阅式、热点式等。社区将构建数据与应用的良性循环,提高服务效率,同时注重生态优美、绿色低碳、社会和谐,以实现幸福民生和产业发展。 建设运营上,未来社区强调科学规划、以人为本,创新引领、重点突破,统筹推进、整体提升。通过实施院落+社团自治工程,转变政府职能,深化社区自治法制化、信息化,解决社区治理中的重点问题。目标是培养有活力的社会组织,提高社区居民参与度和满意度,实现社区治理服务的制度机制创新。 未来社区的数字化解决方案包括信息发布系统、服务系统和管理系统。信息发布系统涵盖公共服务类和社会化服务类信息,提供政策宣传、家政服务、健康医疗咨询等功能。服务系统功能需求包括办事指南、公共服务、社区工作参与互动等,旨在提高社区服务能力。管理系统功能需求则涉及院落管理、社团管理、社工队伍管理等,以实现社区治理的现代化。 最后,未来社区建设注重整合政府、社会组织、企业等多方资源,以提高社区服务的效率和质量。通过建立社区管理服务综合信息平台,提供社区公共服务、社区社会组织管理服务和社区便民服务,实现管理精简、高效、透明,服务快速、便捷。同时,通过培育和发展社区协会、社团等组织,激发社会化组织活力,为居民提供综合性的咨询和服务,促进社区的和谐发展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值