java入门基础笔记——文件与数据流(六)

java入门基础笔记——文件与数据流(六)

java程序的输入输出流操作主要针对3种不同类型

  1. 控制台:屏幕输出和键盘输入。
  2. 文件:针对磁盘文件的读写操作。
  3. 网络:通过网络套接字实现数据的发送和接受。

JAVA API提供2种流来处理,字节流(1个字节),字符流(2个字节)。字节流主要是处理非文本文件,例如图片,音频。字符流主要是处理文本文件。

字节流

InputStream和Outputstream是字节流的基本类,也可以说是其他字节流的父类。

InputStream类的主要方法:
public int available();
public void close();
public void mark(int readlimit);
public boolean markSupported();
public int read(byte[] b);
public int read(byte[] b,int off,int len);
public void reset();
public long skip(long n);
public abstract int read();
read()方法在读取数据前一直处于阻塞状态,在读取字节流后,需要用close()来将其关闭来释放资源。

OutputStream类的主要方法:
void close();
void flush();
void write(byte[] b);
void write(byte[] b,int off,int len);
void abstract write(int b);
write()方法在写入前一直处于阻塞,写完后需要用close()关闭。

文件字节流(FileInputStream和FileOutputStream)
FileInputStream的构造方法
public FileInputStream(File file);文件
public FileInputStream(String name);文件名

注意:如果所指文件不存在或是指定的是一个目录,会出现FileNotFonudException异常。

FileOutputStream的构造方法
public FileOutputStream(File file);
public FileOutputStream(File file,boolean append);
public FileOutputStream(FileDescriptor fdObj);
public FileOutputStream(String name);
public FileOutputStream(String name boolean append);

注意:创建对象时,如果指定的不是文件而是一个目录,或者无法打开或创建文件,也会有FileNotFonudException异常。

字节数组流(ByteArrayInputStream和ByteArrayOutputStream)
ByteArrayInputStream构造方法:
public ByteArrayInputStream(byte[] buf);
public ByteArrayInputStream(byte[] buf,int offset,int length);
ps:read()方法中,如果文件数据读完了,会返回-1;

ByteArrayOutputStream构造方法:
public ByteArrayOutputStream();
public ByteArrayOutputStream(int size);

数据流(DataInputStream和DataOutputStream)
数据流是文件字节流的子类
DataInputStream构造方法
public DataInputStream(InputStream in);

这个构造方法比较特殊,括号里需要放另一个输入流
例如:
FileInputStream in = new FileInputStream(“file.txt”);
DataInputStream din = new DataInputStream(in);

DataOutputStream构造方法
public DataOutputStream(OutputStream out);
创建对象同上

缓冲字节流(BufferedInputStream和BufferedOutputStream)

public BufferedInputStream(InputStream in);
public BufferedInputStream(InputStream in,int size);

输出流只需改为Output

标准输入输出流
java.lang.System有3个静态成员,分别是in,out,err。
printStream是输出类,System.out是printStream类型的变量。

  1. 它可以直接输出多种数据类型的不同成员方法
  2. 它的大部分成员方法不抛出异常
  3. 可以选择是否使用强制输出特性。如果使用的话,输出回车换行时,在缓存的数据会全部自动写入指定会文件或窗口。

重定向:标准输入流和输出流可以与指定文件建立起对应关系。就是说读文件时,数据从文件读取,当要输出数据时,数据写入文件。

字符流

Reader和Writer是字符流的基本类,是其他字符流的父类。

Reader的抽象方法:
public abstract int read(char[] c,int off,int len);
public abstract void close();

Writer的抽象方法:
public abstract void writer(char[] c,int off,int len);
public abstract void flush();
public abstract void close();

其实字节流一般都有对应的字符流。

文件字符流(FileReader和FileWriter)
public FileReader(File file);
public FileReader(String filename);
若文件不存在或是一个目录,会有异常。

public FileWriter(File file);
public FileWriter(String filename);
如果文件存在,则写入的内容会被重写,文件不存在的话会试图创建一个文件。

字符数组流(charArrayReader和charArrayWriter)
缓冲字符流(BufferedReader和BufferedWriter)

字符与字节的转换(InputStreamReader和OutputStreamWriter)

随机访问文件(RandomAccessFile)支持随机读写

对象序列化(Serializable):在软件升级的过程中,不同版本之间的文件兼容性是必须考虑的。在Socket和RMI等网络编程中很重要。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值