前言:File类只是实现了对文件本身的操作,却无法实现对文件内容的操作
字节流与字符流
流:主要指数据的处理方式以及目标内容的处理机制,所有的流都分为输入流和输出流两种
- 字节操作流:OutputStream(字节输出流)InputStream(字节输入流)
- 字符操作流:Writer(字符输出流)Reader(字符输入流)
通用操作步骤
- 通过File类设定要操作的文件路径(针对文件流而言)
- 通过字节流或字符流的子类为父类进行对象实例化处理
- 进行读、写的操作
- 流属于宝贵资源,操作完成后必须进行关闭
OutPutStream
public abstract class OutputStream
extends Object
implements Closeable, Flushable
这个抽象类是表示字节输出流的所有类的超类。 输出流接收输出字节并将其发送到某个接收器。
需要定义OutputStream子类的应用OutputStream必须至少提供一个写入一个字节输出的方法。
public interface Closeable
extends AutoCloseable
A Closeable是可以关闭的数据的源或目的地。 调用close方法来释放对象持有的资源(如打开的文件)。
public interface AutoCloseable
可以保存资源的对象(如文件或套接字句柄),直到它关闭。 AutoCloseable对象的close()方法在退出已在资源规范头中声明对象的try -with-resources块时自动调用。 这种结构确保迅速释放,避免资源耗尽异常和可能发生的错误。
API Note:
实际上,基类实现自动关闭是可能的,实际上是可行的,尽管不是所有的子类或实例都将保存可释放的资源。 对于必须以完全一般性操作的代码,或者当知道AutoCloseable实例需要资源释放时,建议使用try资源结构。 然而,使用设施,例如当Stream同时支持I / O基和非I / O基的形式, try -with资源块是一般不必要使用非I / O基形式时。
public interface Flushable
A Flushable是可以刷新的数据的目的地。 调用flush方法将任何缓冲输出写入底层流。
说白了就是强制清空缓冲区的内容
public class Test {
public static void main(String[] args) throws IOException {
//定义要进行输出的磁盘完成路径
File file = new File("D:" + File.separator + "test-new.txt");
if (!file.getParentFile().exists()) {
file.getParentFile().mkdirs();
}
//通过子类进行父抽象类的实例化
OutputStream fileOutputStream = new FileOutputStream(file);
//流输出
fileOutputStream.write("lalalala德玛西亚".getBytes());
//关闭流
fileOutputStream.close();
}
}
如果不希望覆盖内容而是追加,append设为true即可
public class Test {
public static void main(String[] args) throws IOException {
//定义要进行输出的磁盘完成路径
File file = new File("D:" + File.separator + "test-new.txt");
if (!file.getParentFile().exists()) {
file.getParentFile().mkdirs();
}
//通过子类进行父抽象类的实例化
OutputStream fileOutputStream = new FileOutputStream(file,true);
//流输出
fileOutputStream.write("lalalala撸啊撸啊".getBytes());
//关闭流
fileOutputStream.close();
}
}
如果只想实现部分输出可设置开始和步长
public class Test {
public static void main(String[] args) throws IOException {
//定义要进行输出的磁盘完成路径
File file = new File("D:" + File.separator + "test-new.txt");
if (!file.getParentFile().exists()) {
file.getParentFile().mkdirs();
}
//通过子类进行父抽象类的实例化
OutputStream fileOutputStream = new FileOutputStream(file);
//流输出
fileOutputStream.write("lalalala撸啊撸啊".getBytes(),0,10);
//关闭流
fileOutputStream.close();
}
}