package com.itheima.output;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class OutputDemo1 {
public static void main(String[] args) throws IOException {
//1.创建字节流对象---告诉虚拟机我要往哪个文件中写数据了
//注意点:如果文件不存在,会帮我们自动创建出来
//如果文件存在,会把文件清空。
// FileOutputStream fos = new FileOutputStream("D:\\a.txt");
FileOutputStream fos = new FileOutputStream(new File("D:\\a.txt"));
//2.写数据 传递一个整数时,那么实际上写到文件中的,是这个整数在码表中对应的那个字符
fos.write(97);
//3.释放资源
fos.close();//告诉操作系统,我现在已经不用这个文件了.
}
}
方法名 | 说明 |
---|---|
void write (int b) | 将指定的字节写入此文件输出流,一次写一个数据 |
void write(byte[] b) | 将 b.length字节从指定的字节数组写入此文件输出流,一次写一个字节数组数据 |
void write(byte[] b,int off,int len) | 将 len 字节从指定的字节数组开始,从偏移量off开始写入此文件输出流,一次写一个字节数组的部分数据 |
package com.itheima.output;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class OutputDemo2 {
public static void main(String[] args) throws IOException {
//一次写一个数据
FileOutputStream fos = new FileOutputStream("a.txt");
fos.write(97);
fos.write(98);
fos.write(99);
fos.close();
}
}
package com.itheima.output;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class OutputDemo3 {
public static void main(String[] args) throws IOException {
//一次写一个字节数组数据
FileOutputStream fos = new FileOutputStream("a.txt");
byte[]bytes={97,98,99};
fos.write(bytes);
fos.close();
}
}
package com.itheima.output;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class OutputDemo4 {
public static void main(String[] args) throws IOException {
//一次写一个字节数组部分数据
FileOutputStream fos = new FileOutputStream("a.txt");
byte[] bytes={97,98,99,100};
fos.write(bytes,0,3);//从 bytes 数组第一个位置写,一共写3个
fos.close();
}
}
package com.itheima.output;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class OutputDemo5 {
public static void main(String[] args) throws IOException {
//第二个参数就是续写开关,如果没有传递,默认就是false
//表示不打开续写功能,那么创建对象的这行代码会清空文件
//如果第二个参数为 true,表示打开续写功能
//那么创建对象的这行代码就不会清空文件
FileOutputStream fos = new FileOutputStream("a.txt",true);
fos.write(97);
fos.write("\r\n".getBytes());
fos.write(98);
fos.write("\r\n".getBytes());
fos.write(99);
fos.write("\r\n".getBytes());
fos.write(100);
fos.write("\r\n".getBytes());
fos.write(101);
fos.write("\r\n".getBytes());
fos.write(102);
fos.write("\r\n".getBytes());
}
}
try-catch-finally
finally特点
package com.itheima.output;
import java.io.FileOutputStream;
import java.io.IOException;
public class OutputDemo6 {
public static void main(String[] args) {
FileOutputStream fos = null;
try {
// System.out.println(2/0);
fos = new FileOutputStream("a.txt");
fos.write(97);
}catch(IOException e){
e.printStackTrace();
}finally{
//finally 语句里边的代码,一定会被执行
if(fos != null){
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
字节输入流
字节输入流读取数据的步骤
示例代码
package com.itheima.input;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class InputDemo1 {
public static void main(String[] args) throws IOException {
//如果文件存在,那么就不会报错
//如果文件不存在,那么就直接报错
FileInputStream fis = new FileInputStream("a.txt");
int read = fis.read();
//一次读取一个字节,返回值就是本次读到的那个字节数据
//也就是字符在码表中对应的那个数字
//如果我们想要看到的是字符数据,那么一定要强转为char
System.out.println(read);
fis.close();
}
}
package com.itheima.input;
import java.io.FileInputStream;
import java.io.IOException;
public class InputDemo2 {
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("a.txt");
//1,文件中多个字节我怎么办?
// while(true){
// int i1 = fis.read();
// System.out.println(i1);
// }
int b;
while((b = fis.read())!= -1){ //判断读取到的数据是否 为 -1
System.out.print((char)b);
}
fis.close();
}
}
案例需求
把 “D:\itheima\嘿嘿嘿.avi"复制到模块目录下的"嘿嘿嘿.avi”(文件可以是任意文件)
实现步骤
package com.itheima.input;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class InputDemo4 {
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("D:\\itheima\\嘿嘿嘿.avi");
FileOutputStream fos = new FileOutputStream("嘿嘿嘿.avi");
byte[] bytes = new byte[1024];
int len;//本次读到的有效字节个数 --- 这次读了几个字节
while((len = fis.read(bytes))!= -1){
fos.write(bytes,0,len);
}
fis.close();
fos.close();
}
}
方法名 | 说明 |
---|---|
BufferedOutputStream(OutputStream out) | 创建字节缓冲输出流对象 |
BufferedInputStream(inputStream in) | 创建字节缓冲输入流对象 |
package com.itheima.input;
import java.io.*;
public class InputDemo5 {
public static void main(String[] args) throws IOException {
//就要利用缓冲流去拷贝文件
//创建一个字节缓冲输入流
//在底层创建了一个默认长度为8192的字节数组
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("嘿嘿嘿.avi"));
//创建一个字节缓冲输出流
//在底层创建了一个默认长度为8192的字节数组
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("copy.avi"));
int b;
while((b = bis.read())!= -1){
bos.write(b);
}
//方法的底层会把字节流给关闭。
bis.close();
bos.close();
}
}
案例需求
把"D:\itheima\嘿嘿嘿.avi"复制到模块目录下的"嘿嘿嘿.avi中"
实现步骤
package com.itheima.input;
import java.io.*;
public class InputDemo6 {
public static void main(String[] args) throws IOException {
//缓冲流结合数组,进行文件拷贝
//创建一个字节缓冲输入流
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("嘿嘿嘿.avi"));
//创建一个字节缓冲输出流
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("copy.avi"));
byte[] bytes = new byte[1024];
int len;
while((len= bis.read(bytes))!= -1){
bos.write(bytes,0,len);
}
bis.close();
bos.close();
}
}