一.创建文件的方式:一种方式即可
方式一:
public void creat01(){ String filePath = "E:\\news.txt"; File file = new File(filePath); try { file.createNewFile(); System.out.println("文件创建成功"); } catch (IOException e) { e.printStackTrace(); } }
只有执行了file.createNewFile();才会在磁盘里创建文件
方式2:
public void creat02() { File parentFile = new File("e:\\"); String filename = "news2.txt"; File file = new File(parentFile, filename); try { file.createNewFile(); System.out.println("创建成功"); } catch (IOException e) { e.printStackTrace(); } }
获取文件的信息:
常用文件操作:file.mkdir,创建一级目录,mkdirs创建多级目录,file.delete删除文件
二.IO流原理及其分类:用于处理数据,比如读写文件,网络通讯等。输入input:读取磁盘里的数据到内存中,输出output:读取内存里的数据输出到磁盘。
字节输入输出流都是针对二进制文件
字节输入流(InPutStream)常用的子类:1.FileInputStream 创建该类对象用于读取文件
字节输出流:OutPutString:子类FileOutputStream
文件的拷贝:
文件字符流:FileWriter,FileReader
读取整个文件:跟上述的差别不大
首先创建文件路径,再创建一个文件读取对象,并把路径加入到其中,最后使用文件的读取(read)方法进行读取,最后再关闭文件字符流。
文件字符流:写入:
上述都称为节点流。针对的是具体的数据源
此外还有处理流:也称为包装流,BufferReader有一个属性reader可以封装任意节点流(只要是reader的子类就可以),可以消除给各个节点流的差异,即一个类有什么类的属性,就可以封装那个类或者其子类。
处理流主要以缓冲的方式来提高输入输出的效率,提供了一大波便捷的方法批量处理数据.
处理流设计模式原理:一个抽象类,有几个子类继承了抽象类,其中有一个子类定义了那个抽象类即父类的一个属性,然后这个类就可以调用其余几个实现了父类方法的子类。
BufferReader就是一个包装流,里面有一个reader属性,可以包装reader的任意子类(节点流)按照字符读取数据,操作字符文件,操作其余非字符文件可能会损毁
包装流读取数据:
包装流写入数据:
buffer的拷贝:
有reader或者writer的称为字符流,有out put的称为字节流
操作二进制文件(如音频,视频,图片):BufferdInPutStream
Buffer进行二进制文件的拷贝
对象流: 序列化:就是在保存数据时,保存数据的值和数据类型,反序列化:恢复数据时,恢复数据的值和数据类型。为了让某个类是可序列化的,则必须实现serializable(该接口无方法)或者externalizable(该接口有方法)接口。
对象输出流:
对象输入流:
注意事项:在反序列化时,即输入流(磁盘到内存),输出类的实例化对象时需要进行向上转型,那个类需要设置为公开型。其余注意事项看下图:
标准输入输出流:标准输入:System.in编译类型 InputStream,运行类型:BufferedInputStream
标准输出流:System.out,编译类型与运行类型一样:PrintStream
转换流:(又有put或out二者之一加上Input或Output之一)。InputStreamReader:Reader的子类,可以传入一个InputStream(字节流)的对象,并将其包装为Reader流。
上述例子,如果不改变a.txt的编码,实际可以直接通过字符流BufferReader进行输入,但改变了编码方式,得先用InputStreamReader将字节流转换为字符流,然后再用字流进行输出。
配置文件:properties 对其进行读
修改配置文件的内容: