FileOutputStream类(jdk1.0)
描述
- java.io.FileOutputStream 类是文件字节输出流,用于将数据写入到文件中。
构造方法
//构造方法
FileOutputStream?(File file) 创建文件输出流以写入由指定的 File对象表示的文件。
FileOutputStream?(String name) 创建文件输出流以指定的名称写入文件。
*参数
* file file:目的地是一个文件
* string name:目的地是一个文件路径
//当你创建一个流对象时,必须先传递一个文件路径,该路径下,如果没有这个文件,会创建该文件
//,如果有这个文件,会清空这个文件中的数据。然后把你想要的数据写入中。
FileOutputStream(File file,boolean append);创建文件出入流以写入由指定的File对象表示的文件中。
FileOutputStream(String name,boolean append);创建文件输出流以指定的名称写入文件中
//这两个构造方法,参数中都需要传入一个Boolean类型的值,
//true表示的追加数据,false表示覆盖原文件
代码实例
public static void main(String[] args) throws IOException {
//FileOutputStream?(String name) 创建文件输出流以指定的名称写入文件。
FileOutputStream fops = new FileOutputStream("day28_IO\\a.txt");
//调用写入方法
fops.write(97);
//关闭流
fops.close();
}
图集分析
数据的追加续写
- 如何在保留文件中的数据,还能继续添加新的数据到目标文件中?
- 使用带两个参数地构造方法
代码实例
//创建对象
File file = new File("day28_IO\\c.txt");
FileOutputStream fops = new FileOutputStream(file,true);
//调用write方法写入
fops.write("张三".getBytes());
//关闭流
fops.close();
写入换行
-
windows系统里,换行符是: \r \n。把以指定是否需要追加续写换行。
linux系统中,换行符号是: /r /n.
mac系统中,换行符号是 :/r
unix系统里,每行结尾只有换行,即: \n -
回车符\r和换行符\n
回车符:回到一行的开头。
换行符:下一行(new Line)。 -
系统中的换行:
windows系统中,每行结尾是:回车加换行。即,\r\n。
Linux系统中,每行的结尾只有换行,即,/n。
mac系统中,每行的结尾是回车,即,/r。
FileInputStream类
描述
- java.io.FileInputStream 类是文件输入流,从文件中读取字节。
常用方法
//构造方法
FileInputStream?(File file) 通过打开与实际文件的连接来创建一FileInputStream ,该文件由文件系统中的 File对象 file命名。
FileInputStream?(String name) 通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系统中的路径名 name命名。
//当你创建一个流对象时,必须传入一个文件路径。该路径下,如果没有该文件,会抛出FileFoundException。
//普通方法
int available?() 返回从此输入流中可以读取(或跳过)的剩余字节数的估计值,而不会被下一次调用此输入流的方法阻塞。
读取数据的原理
- java --> JVM --> OS --> OS调用系统中读取数据的方法 -->读取文件中的数据
代码实例
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("C:\\c.txt");
int len = 0;
byte[] bytes = new byte[1024];
while ((len = fis.read(bytes)) != -1) {
//System.out.println(new String(bytes));
System.out.println(new String(bytes, 0, len));
}
fis.colos();
}
//可以使用字节数组来读取数据:read(byte[] b):从输入流中读取多个字节,并且将其存储到缓冲区数组b当中
-
备注;使用数组读取,每次可以读取多个字节,减少系统间的io操作次数,从而提高了读取的效率,建议使用。
-
练习从系统中读取一个图片复制到桌面上
//1.创建一个字节输入流对象,构造方法中绑定需要读取的路径 //2.创建一个字节输出流对象,构造方法中绑定需要写入的文件 //3.使用字节输入流对象中的read方法读取文件 //4.使用字节输出流对象中的write方法,把读取到字节写入到指定的文件中 //5.释放资源(先开的后关,后开的先关/相当于栈) //复制文件 public static void main(String[] args) throws IOException { //来源 File source = new File("D:\\aa.jpeg"); //目的地 File destination = new File("E:\\bb.jpeg"); try (FileInputStream fis = new FileInputStream(source); FileOutputStream fos = new FileOutputStream(destination) ) { System.out.println(fis.available() + "available"); //public int available?() throws IOException 获取文件字节 byte[] arr = new byte[fis.available()]; int a = 0; while ((a = fis.read(arr)) != -1) { fos.write(arr); } } catch (IOException e) { e.printStackTrace(); } }