在java.io包里面File类是唯一 一个与文件本身有关的程序处理类,但是File只能够操作文件本身而不能够操作文件的内容,或者说在实际的开发之中IO操作的核心意义在于:输入与输出操作。而对于程序而言,输入与输出可能来自于不同的环境,例如:通过电脑连接服务器上进行浏览的时候,实际上此时客户端发出了一个信息,而后服务器接收到此信息之后进行回应处理。
对于服务器或者是客户端而言实际上传递的就是一种数据流的处理形式,而所谓的数据流指的就是字节数据。而对于这种流的处理形式在java.io包里面提供有两类支持:
·字节处理流:OutputStream(输出字节流)、InputStream(输入字节流);
·字符处理流:Writer(输出字符流)、Reader(输入字符流);
所有的流操作都应该采用如下统一的步骤进行,下面以文件处理的流程为例:
·如果现在要进行的是文件的读写操作,则一定要通过File类找到一个文件路径;
·通过字节流或字符流的子类为父类对象实例化;
·流的操作属于资源操作,资源操作必须进行关闭处理;
1. 字节输出流:OutputStream
字节的数据是以byte类型为主实现的操作,在进行字节内容输出的时候可以使用OutputStream类完成,这个类的基本定义如下:
public abstract class OutputStream extends Object implements Closeable,Flushable
首先可以发现这个类实现了两个接口,于是基本的对应关系如下:
Closeable: |
Flushable: |
public interface Closeable extends AutoCloseable {public void close() throws Exception;} |
public interface Flushable{public void flush() throws IOException;} |
OutputStream类定义的是一个公共的输出操作标准,而在这个操作标准里面一共定义有三个内容输出的方法。
No |
类型 |
描述 |
|
01 |
public abstract void write(int b) throws IOException |
普通 |
输出单个字节数据 |
02 |
public void write(byte[] b) throws IOException |
输出一组字节数据 |
|
03 |
public void write(byte[] b,int off,int len) throws IOException |
输出部分字节数据 |
但是需要注意的一个核心问题在于:OutputStream类毕竟是一个抽象类,而这个抽象类如果要想获得实例化对象,按照传统的认识应该通过子类实例的向上转完成,如果说现在要进行的是文件处理操作,则可以使用FileOutputStream子类:
因为最终都需要发生向上转型的处理关系,所以对于此时的FileOutputStream子类核心的关注点就可以放在构造方法:
·【覆盖】构造方法:public FileOutputStream(File file) throws FileNotFoundException;
·【追加】构造方法:public FileOutputStream(File file,boolean append) throws FileNotFoundException;
@H_990_301@1 import java.io.File; 2 java.io.FileOutputStream; 3 java.io.OutputStream; 4 public class JavaAPIDemo { 5 static void main(String[] args) throws Exception { 6 File file = new File("D:" + File.separator + "hello" + 7 File.separator + "mldn.txt"); // 1、指定要操作的文件的路径 8 if (!file.getParentFile().exists()) { 文件不存在 9 file.getParentFile().mkdirs() ; 创建父目录 10 } 11 OutputStream output = new FileOutputStream(file) ; 2、通过子类实例化 12 String str = "www.mldn.cn" ; 要输出的文件内容 13 output.write(str.getBytes()); 3、将字符串变为字节数组并输出 14 output.close(); 4、关闭资源 15 } 16 }