java IO复习笔记

时间:2021-10-23 21:52:56

1. IO是什么?

Input Output

Java的核心库java.io提供了全面的IO接口。包括:文件读写、标准设备输出等。Java中IO是以流为基础进行输入输出的,所有数据被串行化写入输出流,或者从输入流读入。

2. 为什么使用Java IO?

3. JAVA IO与JAVA NIO有什么不同?

详见:

4. 骨架

java IO复习笔记

File 类 :File对象可用来获取或处理与磁盘文件相关的信息,如:权限,时间,日期和目录路径

5. JAVA IO 怎么用?

1. 读数据的逻辑为:

open a stream

while more information

read information

close the stream

    2. 写数据的逻辑为:

open a stream

while more information

write information

close the stream

File :

    1). File类的构造方法:

File(String directoryPath)

File(String directoryPath, String filename)

File(File dirObj, String filename)

    2). 目录操作常用方法:

public boolean mkdir() 根据抽象路径名创建目录 。

public boolean mkdirs() 根据抽象路径名创建多层目录 。

public String[] list() 返回抽象路径名表示路径中的文件名和目录名 。

public File[] listFiles() 返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。

boolean exists()

boolean isFile()

boolean isDirectory()

6. 使用注意事项

    1). IO流类的构造方法决定是输入流还是输出流。输入流连接一个文件,它会将文件中的内容读到流里面,read方法是将流里面的内容往外读。输出流连接一个文件,它的write方法,是将内存中的内容,写入到输出流中,

然后再写到文件中。

2). 输出不一定非要输出到文件中,也可以输出到内存中,如:ByteArrayOutputStream。输入流的read方法是从流里面读出来数据,输出流的write方法时将内存中的数据写入到流中,方便输出出去。

3). 输入/输出是相对于程序来说的。程序在使用数据时所扮演的角色有两个:一个是源,一个是目的。若程序是数据流的源,即数据的提供者,这个数据流对程序来说就是一个"输出数据流"(数据从程序流出)。若程序是数据

流的终点,这个数据流对程序而言就是一个“输入数据流” ( 数据从程序外流向程序)

4). Java的I/O库提供了一个称做链接的机制,可以将一个流与另一个流首尾相接,形成一个流管道的链接。这种机制实际上是一种被称为Decorator(装饰)设计模式的应用。

5). 当你对文件的操作结束后,需要调用close( )来关闭文件

6). FileOutputStream的创建不依赖于文件是否存在。在创建对象时FileOutputStream在打开输出文件之前创建它。这种情况下你试图打开一个只读文件,会引发一个IOException异常

7). 如果read()方法返回-1,意味着程序已经读到了流的末尾,此时流内已经没有多余的数据可供读取了。-1是一个int类型,不是byte或者char类型,这是不一样的。当达到流末尾时,你就可以关闭流了。

8). ByteArrayInputStream和ByteArrayOutputStream:

a. writeTo(OutputStream out) :将此字节数组输出流的全部内容写入到指定的输出流参数中

reset():将此字节数组输出流的count字段重置为零,从而丢弃输出流中目前已累积的所有输出。通过重新使用已分配的缓冲区空间,可以再次使用该输出流

b. toByteArray():

toString() : 将流中的内容转换为字符串

9). 字节流的编码规范与具体的平台有关,可以在构造流对象时指定规范,也可以使用当前平台的缺省规范

10). InputStreamReader和OutputStreamWriter是java.io包中用于处理字符流的基本类,用来在字节流和字符流之间搭一座“桥”。

public InputSteamReader(InputSteam in,String enc)

public OutputStreamWriter(OutputStream out,String enc)

11). FileReader和FileWriter:FileWriter类的创建不依赖于文件存在与否。在创建文件之前,FileWriter将在创建对象时打开它来作为输出。如果你试图打开一个只读文件,将引发一个IOException异常

12). ObjectInput 接口继承DataInput接口。它支持对象序列化。特别注意 readObject( )方法,它叫反序列化对象。所有这些方法在出错情况下引发IOException 异常

13). Reader的read()方法返回一个字符,意味着这个返回值的范围在0到65535之间(当达到流末尾时,同样返回-1)。这并不意味着Reade只会从数据源中一次读取2个字节,Reader会根据文本的编码,

一次读取一个或者多个字节。

14). try(FileInputStream input = new FileInputStream("file.txt")) {} 防止异常未正常关闭

15). RandomAccessFile file = new RandomAccessFile("c:\\data\\file.txt", "rw");

16). 当你创建了一个指向已存在文件的FileOutputStream,你可以选择覆盖整个文件,或者在文件末尾追加内容。通过使用不同的构造函数可以实现不同的目的。

17). 如果你希望类能够序列化和反序列化,必须实现Serializable接口。

7. 优化

1). void flush() :刷新输出流,强制缓冲区中的输出字节被写出。

2). 若处理的数据量较多,为避免每个字节的读写都对流进行,可以使用过滤流类的子类缓冲流。缓冲流建立一个内部缓冲区,输入输出数据先读写到缓冲区中进行操作,这样可以提高文件流的操作效率

3). BufferedInputStream(InputStream inputStream, int bufSize)

4). 一次性读取一个字节数组的方式,比一次性读取一个字节的方式快的多,所以,尽可能使用这两个方法代替read()方法。

8. 监控

为什么只有第一个read方法是抽象的,而其余两个read方法都是具体的?

因为第二个read方法依靠第三个read方法来实现,而第三个read方法又依靠第一个read方法来实现,所以说只有第一个read方法是与具体的I/O设备相关的,它需要InputStream的子类来实现。

java IO复习笔记的更多相关文章

  1. Java基础复习笔记系列 七 IO操作

    Java基础复习笔记系列之 IO操作 我们说的出入,都是站在程序的角度来说的.FileInputStream是读入数据.?????? 1.流是什么东西? 这章的理解的关键是:形象思维.一个管道插入了一 ...

  2. Java基础复习笔记系列 五 常用类

    Java基础复习笔记系列之 常用类 1.String类介绍. 首先看类所属的包:java.lang.String类. 再看它的构造方法: 2. String s1 = “hello”: String ...

  3. Java基础复习笔记系列 九 网络编程

    Java基础复习笔记系列之 网络编程 学习资料参考: 1.http://www.icoolxue.com/ 2. 1.网络编程的基础概念. TCP/IP协议:Socket编程:IP地址. 中国和美国之 ...

  4. Java基础复习笔记系列 八 多线程编程

    Java基础复习笔记系列之 多线程编程 参考地址: http://blog.csdn.net/xuweilinjijis/article/details/8878649 今天的故事,让我们从上面这个图 ...

  5. Java基础复习笔记系列 四 数组

    Java基础复习笔记系列之 数组 1.数组初步介绍? Java中的数组是引用类型,不可以直接分配在栈上.不同于C(在Java中,除了基础数据类型外,所有的类型都是引用类型.) Java中的数组在申明时 ...

  6. Java IO学习笔记:概念与原理

    Java IO学习笔记:概念与原理   一.概念   Java中对文件的操作是以流的方式进行的.流是Java内存中的一组有序数据序列.Java将数据从源(文件.内存.键盘.网络)读入到内存 中,形成了 ...

  7. Java IO学习笔记总结

    Java IO学习笔记总结 前言 前面的八篇文章详细的讲述了Java IO的操作方法,文章列表如下 基本的文件操作 字符流和字节流的操作 InputStreamReader和OutputStreamW ...

  8. Java IO学习笔记三

    Java IO学习笔记三 在整个IO包中,实际上就是分为字节流和字符流,但是除了这两个流之外,还存在了一组字节流-字符流的转换类. OutputStreamWriter:是Writer的子类,将输出的 ...

  9. Java IO学习笔记二

    Java IO学习笔记二 流的概念 在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成. 程序中的输入输 ...

随机推荐

  1. 为什么ARM的frq中断的处理速度比较快

    FRQ向量位于异常向量表的最末端,不需要跳转就可以直接执行后面跟随的异常处理程序:FRQ模式中私有寄存器数量最多,在进行异常处理时不需要对这些寄存器进行压栈保存.

  2. Excel里面将头尾第一个字母保留,去除中间的用*号代替,主要是REPT函数的应用,一开始我还以为要自己写个自定义函数

    Excel里面将头尾第一个字母保留,去除中间的用*号代替,主要是REPT函数的应用,一开始我还以为要自己写个自定义函数 =LEFT(A1,1)&REPT("*",(LEN( ...

  3. DOM4J 读取XML配置文件进行数据库连接

        介绍介绍DOM4J.    据说是非常优秀非常优秀的Java XML  API(Dom4j is an easy to use, open source library for working ...

  4. 打开新窗口(window.open)

    open() 方法可以查找一个已经存在或者新建的浏览器窗口. 语法: window.open([URL], [窗口名称], [参数字符串]) 参数说明: URL:可选参数,在窗口中要显示网页的网址或路 ...

  5. php-GD库的函数(一)

    <?php //getimagesize - 取得图片的大小[即长与宽] //print_r(getimagesize("./logo_i.gif")); //Array ( ...

  6. window&period;onload&lpar;&rpar;与&dollar;&lpar;document&rpar;&period;ready&lpar;&rpar;区别

    浏览器加载完DOM后,会通过javascript为DOM元素添加事件,在javascript中,通常使用window.onload()方法. 在jquery中,则使用$(document).ready ...

  7. python基础6 迭代器 生成器

    可迭代的:内部含有__iter__方法的数据类型叫可迭代的,也叫迭代对象实现了迭代协议的对象 运用dir()方法来测试一个数据类型是不是可迭代的的. 迭代器协议是指:对象需要提供next方法,它要么返 ...

  8. 一个spring mvc 需要用到到文件

    一. 类 org.springframework.stereotype.Controller; org.springframework.web.bind.annotation.RequestMappi ...

  9. thinkphp或者kohana 导入和读取文件

    1.无论是那个框架的导入,其实都是一样的原理的,但是首先我们要导入包,可能就这点不同. kohana的导入包的方法:require_once(Kohana::find_file('vendor','P ...

  10. react-router 4&period;x

    本次主要总结react中的路由的使用,实现让根组件根据用户访问的地址动态挂载不同的组件. 1,创建项目 首先使用命令 npx create-react-app react-router创建项目,然后n ...