0226 字节流

通过可控制台对文件进行读写操作

字节流

1、字节输出流OutputStream,该动作是对文件进行写入方法

该类是一个抽象类,不能创建类对象,所以我们要创建其子类对象 FileOutputStream

先看其构造方法

FileOutputStream(File file);

FileOutputStream(String name);

这两个构造方法就是用来明确文件夹的位置 ,要写入数据,先明确要写入数据的文件位置在哪。

该文件的文件路径 如果不存在该文件,那么执行一次就会创建一次该文件,并且覆盖已有的文件,写入数据时,也会覆盖数据内容,如果想续写,就要在构造方法传的参数后加一个布尔值true就是开启续写功能,默认不写就是不续写

常用类方法

write(int b)该方法是一个字节一个字节的写入到文件中

write(byte【】 byte)该方法是一个字节数组写入到文件中

write(byte【】int a,int b)该方法是将一个字节数组从a开始到b结束的数据写入到文件中

close()释放资源

代码展示 一个字节一个字节的写入文件,一个字节数组写入文件

	public static void main(String[] args) throws InterruptedException, IOException {
		//明确目的地
		//只要没有就创建,只要有就覆盖
		File file=new File("F:\\io1127\\demo11.txt");
		FileOutputStream fos=new FileOutputStream(file,true);
		//换行
		fos.write("\r\n".getBytes());
		//将字节写入文件
		fos.write(49);
		fos.write(48);
		fos.write(48);
		//将字节数组写入文件
		byte[] bytes={65,66,67,68};
		fos.write(bytes);
		fos.write(bytes, 2,2 );
		//换行
		fos.write("\r\n".getBytes());
		//字符串转字节数组
		fos.write("你好".getBytes());
		//释放资源
		fos.close();
	}

  在上述代码中 我们写入的int值是字节,那么存到文件中是字符串,比如字节49代表的是十进制的1,字节65代表a,如果我们想写入字符“你好”,那我们需要将字符串“你好”转为字节用到getBytes()方法。字节转为字符串是用到 new String()

那么上述代码中我们将方法中抛的异常都上抛了,那我们解决异常

	public static void main(String[] args){
		//明确目的地
		//只要没有就创建,只要有就覆盖
		File file=new File("F:\\io1127\\demo11.txt");
		FileOutputStream fos=null;
		try {
			fos = new FileOutputStream(file,true);
			//换行
			fos.write("\r\n".getBytes());
			//将字节写入文件
			fos.write(49);
			fos.write(48);
			fos.write(48);
			//将字节数组写入文件
			byte[] bytes={65,66,67,68};
			fos.write(bytes);
			fos.write(bytes, 2,2 );
			//字符串转字节数组
			fos.write("你好".getBytes());
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			//释放资源
			try {
				fos.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		
	}

  

2、字节输入流 InputStream 该动作是对文件中的数据进行读取操作

该类是一个抽象类,不能创建类对象,所以我们要创建其子类对象 FileInputStream

先看其构造方法

FileInputStream(File file);

FileInputStream(String name);

这两个构造方法就是用来明确文件夹的位置 ,要读取数据,先明确要读取数据的文件位置在哪。

常用类方法

read(int b)一个字节一个字节读取

read(byte【】byte)一个字节数组读取

代码展示一个字节一个字节读取

	public static void main(String[] args) throws IOException {
		//明确数据源
		FileInputStream fis=new FileInputStream("F:\\io1127\\demo11.txt");
		//读取 一个字节
		int len=0; 
		while((len=fis.read())!=-1){
			System.out.print((char)len);
		}
		
		System.out.println();
		//释放资源
		fis.close();
	}

  

代码展示字节数组读取

	public static void main(String[] args) throws IOException {
		FileInputStream fis=new FileInputStream("F:\\io1127\\demo11.txt");
		//创建字节数组
		byte[] bytes=new byte[2];
		//读取一个字节数组
		int len=0;
		while((len=fis.read(bytes))!=-1){
			System.out.print(new String(bytes,0,len));
		}
		//释放资源
		fis.close();
		
	}

  

代码展示复制文件,先读取要被复制的文件 再写入到文件中

一个字节一个字节读取

	public static void main(String[] args) throws IOException {
		//明确读取位置
		FileInputStream fis=new FileInputStream("F:\\io1127\\demo11.txt");
		//明确目的地
		FileOutputStream fos=new FileOutputStream("F:\\io1127\\a\\demo11.txt");
		//开始复制 一个字节一个字节复制
		int len=0;
		while((len=fis.read())!=-1){
			fos.write(len);
		}
		//释放资源
		fis.close();
		fos.close();
	}

  

字节数组读取

	public static void main(String[] args) throws IOException {
		//明确读取位置
		FileInputStream fis=new FileInputStream("F:\\io1127\\demo11.txt");
		//明确目的地
		FileOutputStream fos=new FileOutputStream("F:\\io1127\\a\\demo11.txt");
		//字节数组复制
		byte[] bytes=new byte[2];
		int len=0;
		while((len=fis.read(bytes))!=-1){
			fos.write(bytes,0,len);
		}
		//释放资源
		fis.close();
		fos.close();
	}

  

posted @ 2021-02-26 11:12  公雪  阅读(119)  评论(0编辑  收藏  举报