VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > Python基础教程 >
  • Python3基础之IO基本操作

一、基本概念

 

  • 数据流
    输入输出时,数据在通信通道中流动。所谓数据流就是所有数据通信通道之中数据的起点和终点。
  • 输入/输出类
    在java.io中提供了60多个类(流),从功能上分为2大类:输入流/输出流;从流结构上分为:字节流/字符流;

二、类层次结构

三、文件的顺序访问

 

  1. 使用引入语句引入 java.io 包 import java.io.*;
  2. 根据不同数据源和输入输出任务 建立字节流或字符流对象
  3. 若需要对字节或字符流信息组织加工为数据 在已建字节流或字符流对象上构建数据流对象
  4. 用输入输出流对象类的成员方法进行读写操作 需要时设置读写位置指针
  5. 关闭流对象
    其中步骤 2--5 要考虑异常处理

四、类对象&成员方法

4.1 FileInputStream 和FileOutputStream类

 

一. FileInputStream 类构造方法有

FileInputStream(String name) //用文件名name建立流对象
FileInputStream(File file) //用文件对象file建立流对象

二. 读取文件信息

int read() //读流中一个字节 若流结束则返回-1
int read(byte b[]) //从流中读字节填满字节数组b 返回所读字节数 若流结束则返回-1
int read(byte b[],int off, int len) //从流中读字节填入b[off]开始处 返回所读字节数 若流结束则返回-1

三.FileOutputStream类的构造方法有

FileOutputStream(String name,boolean append) //用文件名name创建流对象
FileOutputStream(File file,boolean append) //用文件对象 file 建立流对象
PS:2中构造函数的第二个参数都是可选的。若这个参数的值为 true 则向文件尾输出字节流

四.向输出流写信息

void write(int b) //将整型数据的低字节写入输出流
void write(byte b[])//将字节数组b中的数据写入输出流
void write(byte b[],int off,int len)//将字节数组 b 中从 off 开始的 len 个字节数据写入输出流

五.关闭FileInputStream/FileOutputStream

fin.close();
fos.close();

4.2 BufferedInputStream 和 BufferedOutputStream 类

 

缓冲流类一般与另外的输入输出流类一起配合使用
一.BufferedInputStream 类的构造方法如下

BufferedInputStream(InputStream in) //并创建一个内部缓冲区数组来保存输入数据
BufferedInputStream(InputStream in , int size)//用 指 定 的 缓 冲 区 大 小 size 创 建 BufferedInputStream流对象

二.BufferedOutputStream 类的构造方法如下

BufferedOutputStream(OutputStream out) //创建缓冲输出流 写数据到参数指定的输出流 缓冲区设为默认的 512 字节大小
BufferedOutputStream(OutputStream out, int size)//创建缓冲输出流 写数据到参数指定 的输出流 缓冲区设为指定的size字节大小

三. 用flush()方法更新流
要想在程序结束之前将缓冲区里的数据写入磁盘 除了填满缓冲区或关闭输出流外 还可以显式调用flush()方法

4.3 InputSteamReader 和 OutputStreamWriter 类

 

这是 java.io 包中用于处理字符流的基本类 用来在字节流和字符流之间搭一座 桥
一.InputSteamReader 和 OutputStreamWriter 类的构造方法如下

public InputSteamReader(InputSteam in)
public InputSteamReader(InputSteam in,String enc) 
public OutputStreamWriter(OutputStream out)
public OutputStreamWriter(OutputStream out,String enc)
//enc为指定的编码规范 若无此参数 表示使用当前平台的默认规范 可用getEncoding()方法得到当前字符流所用的编码方式

二.对象成员方法
读写字符的方法 read() write() 关闭流的方法 close()等 与 Reader 和 Writer 类的同名方法用法都是类似的

4.4 FileReader 和 FileWriter 类

 

FileReader 和 FileWriter 类是 InputSteamReader 和 OutputStreamWriter 类的子类 利用它 们可方便地进行字符输入/输出操作
一.FileReader 类的构造方法有

FileReader(File file) //对指定要读的file创建FileReader对象 
FileReader(String fileName) //对指定要读的fileName创建FileReader对象

二.FileWriter 类的构造方法有

FileWriter(File file) 对指定的file创建FileWriter对象
FileWriter(String fileName) 对指定的fileName创建FileWriter对象
// 两个构造方法都可带第二个布尔值的参数append 当append 为true时 为添加到输出流

三.FileReader 类的成员方法

read() //返回输入字符
read(char[] buffer) //输入字符到字符数 组中等

四.FileWriter类的成员方法

write(String str)  //输出字符串
write(char[]buffer) //输出字符串
write(int char)
flush() //输出缓冲字符
close() //在执行flush后关闭输出流
getEncoding() //获得 文件流字符的编码

4.5 BufferedReader 和 BufferedWriter 类

 

一.构造方法

public BufferedReader(Reader in) 
public BufferedReader(Reader in,int sz) 
public BufferedWriter(Writer out) 
public BufferedWriter(Writer out,int sz)
//其中in和out分别为字符流对象 sz为缓冲区大小 从上述构造方法的声明可以看出 缓冲流的构造方法是基于字符流创建相应的缓冲流

二.成员方法
在 BufferedReader 和 BufferedWriter 类中 除了 Reader 和 Writer 中提供的基本读写方法 外 增加了对整行字符的处理方法readLine()和newLine()

readLine() //从输入流中读取一行字符 行结束标志为回车符和换行符
newLine() //向字符输出流中写入一个行结束标记 该标记是由系统 定义的属性 line.separator

五、文件的随机访问

 

1.建立随机访问文件流对象

RandomAccessFile(File file, String mode) 
RandomAccessFile(String name, String mode)
//mode为访问文件的方式 有 r 或 rw 两种形式 若 mode 为 r 则文件只能读出 对这个对象的任何写操作将抛出 IOException 异常   若 mode 为   rw   并且文件不存在   则该文件将被创建   若 name 为目录 名   也将抛出IOException异常

2.访问随机访问文件

read()
write()

3.移动文件指针

public long getFilePointer() throws IOException //返回文件指针的当前字节位置
public void seek(long pos) throws IOException //将文件指针定位到一个绝对地址pos,pos参数指明相对于文件头的偏移量 地址0表示文件的开头 
public long length() throws IOException //返回文件的长度 地址 length() 表示文件 的结尾
public int skipBytes(int n) throws IOException //将文件指针向文件尾方向移动n个字节

六、目录和文件管理

 

6.1 目录管理

public boolean mkdir() //根据抽象路径名创建目录
public String[] list() //返回抽象路径名表示路径中的文件名和目录名

6.2 文件管理

  • 创建一个新的文件对象
File(String pathname) //通过给定的路径名变换的抽象路径创建文件对象
File(File parent, String child) //从父抽象路径 目录 和子路径字符串创建文件对象 
File(String parent, String child) //从父路径和子路径字符串创建文件对象
  • 获得文件名
public String getName()  //得到一个文件名
public String getParent()  //得到一个抽象路径的父路径名
public String getPath()  //得到一个文件的路径名
public String getAbsolutePath()  //得到一个抽象路径的绝对路径名
  • 文件重命名
public boolean renameTo(File dest) //将抽象路径文件名重命名为给定的新文件名
  • 文件删除
public boolean delete() //删除抽象路径表示的文件或目录
  • 文件测试
public boolean exists()  //检查抽象路径表示的文件是否存在
public boolean canWrite()  //检查抽象路径表示的文件是否可写
public boolean canRead()  //检查抽象路径表示的文件是否可读
public boolean isFile()  //检查抽象路径表示的文件是否为正常文件 非目录
public boolean isDirectory()  //检查抽象路径表示的是否为目录
public boolean isAbsolute()  //检查抽象路径表示的是否为绝对路径
  • 获得一般文件信息
public long lastModified() //得到抽象路径表示的文件最近一次修改的时间 
public long length() //得到抽象路径表示的文件的长度

七、Q&A

 

1.字节流操作图片文件不会损坏,而字符流会损坏?
答:字节流是读取的是字节,也就是机器存储时的源码,任何软件在计算机中存储的形式都是二进制。用字符流复制的时候,他会按照你系统的字符码表进行查找和替换,把二进制数据全部按照码表替换了,有一些代码能在编码表中找到编码,就转换成编码,但是还有好多找不到的代码,JVM就会用一些类似的编码代替,文件就会改变了,所以打不开。

项目地址:https://gitee.com/neimenggudaxue/java_study/tree/master/

 
2人点赞
 


作者:迷糊银儿
链接:https://www.jianshu.com/p/706cfe679d02
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


相关教程