操作一个程序的步骤
-
创建源
-
选择流
-
操作文件
-
释放资源
FileInputStream--->普通的read方法返回的是实际的数据。文件字节流,一个一个的读取文件内容--->inputstream要读取内容文件必须存在
使用字节数组分段读取--->注意返回值类型是一个文件的实际大小
*数组里面的大小是一次读几个字节的意思。
byte[] bytes = new byte[3]; //代表一次读三个字节--->缓冲容器
FileInputStream输入流&&FileOutputStream输出流
FileInputStream:通过字节的方式读取文件,适合读取所有类型的文件(图像、视频等)。
全字符考虑FileReader
package iostudy.ioprogramme;
import com.sun.xml.internal.fastinfoset.tools.StAX2SAXReader;
import java.io.*;
/**
* 测试FileInputStream类下的一个方法
* 1、创建源文件
* 2、选择流
* 3、进行文件操作
* 4、关闭源文件
*/
public class IoFileInputStream {
public static void main(String[] args) {
//创建源文件
File src = new File("D:/workspace/practice/main/java/iostudy/ioprogramme/abc.txt");
//选择流--->使用InputStream
InputStream is = null; //输入流
//尝试进行文件操作
try {
is = new FileInputStream(src);
//创建接受长度
int temp = -1;
//创建缓冲容器
byte[] bytes = new byte[1024]; //缓冲容器里面的数据是数组的大小,是一次读取几个字节数据的意思
//进行循环输出
while ((temp=is.read(bytes))!=-1){
System.out.println(); //每三个读取一次。,id
//从中间容器当中读取数据
//字节数组--->字符串--->解码
//构建字符串
String str = new String(bytes, 0, temp);
//不删除中间空格进行读取
//每次读三个,最后一次拿两个
System.out.println(str);
}
}catch (FileNotFoundException e){
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/*
写代码考虑:
1、功能
2、可读性
3、可维护性
*/
FileOutputStream(文件不存在可以自行创建--->可以进行追加写入):通过字节的方式写出或追加数据到文件,适合所有类型的文件(图像、视频...)。
全字符考虑FileWriter
在FileOutputStream当中的构造方法:
-
指定文件对象
-
指定文件名称--->内部包装成file对象
-
追加文件/新建文件--->追加文件是指从最后一行追加内容。新建文件是指从头开始重写
-
记得flush
package iostudy.ioprogramme;
import java.io.*;
import java.nio.charset.StandardCharsets;
/**
* 文件字节输出流
* 1、创建源
* 2、选择流
* 3、具体的操作--->写出内容
* 4、释放资源
* @since JDK 1.8
* @date 2021/5/17
* @author Lucifer
*/
public class IoFileOutputStreamNo1 {
public static void main(String[] args) {
//创建源文件--->不存在自动创建
File src = new File("D:/workspace/practice/main/java/iostudy/ioprogramme/def.txt");
//选择流--->选择输出流--->关键点在于熟悉类里面的构造器以及方法
OutputStream os = null;
//尝试对文件进行操作
try {
// //路径赋值操作
// os = new FileOutputStream(src); //这是新建文件--->相当与重写
// //追加写入
// os = new FileOutputStream(src, true); //会在原有文件后面再写入内容
/*
1、如果将true改成false则会将原来的数据重写
*/
os = new FileOutputStream(src, false);
//写出
String msg = "James Harden";
//创建字节数组写入文件
byte[] datas = msg.getBytes(StandardCharsets.UTF_8); //字符串--->字节数组编码(encoding)
//整体流程:字符--->字节--->写入文件
//将os写出
os.write(datas, 0, datas.length); //注意形参
//写出的过程中要注意刷新,避免数据驻留在内存中
os.flush();
}catch (FileNotFoundException e) {
e.printStackTrace();
}catch (IOException e){
e.printStackTrace();
}finally {
try {
if (null!=os){
//释放资源
os.close();
}
}catch (IOException e){
e.printStackTrace();
}
}
}
}