java-流

java-流

1. 如何处理文件中的内容?

通过java提供输入输出流;来处理文件中的内容数据。

2. 什么是流?

电流:负电荷的正向移动轨迹

水流:水的移动轨迹。

Java中的流:数据的移动轨迹。

3. 什么是输入输出流?

按照数据的流向:

输入流:数据从本程序之外的地方[文件]引入到本程序中时所形成的移动轨迹就是输入流。

【读取数据】

输出流:数据从本程序中流向本程序之外的地方[文件]所形成的移动轨迹就是输出流。

【写出数据】

4. 流的另一个分类

按照每一次读写数据的量:

  1. 字节流:每一次可以读/写,一个字节,8位2进制数据的量,由于所有的数据都可以转换成字节,因此字节流可以处理任何类型的数据【文本,图片,视频,音频…】
  2. 字符流:每一次可以读/写,一个字符,16位2进制数据的量,只能处理文本型数据【word文档,记事本文件】,不能处理图片,视频,音频这些类型的文件。

5. 字节流:

按照数据的流向:

字节输出流【写出数据】

在java中表示字节输出流使用OutputStream类

OutputStream类是一个抽象类,不能通过new的方式创建对象,需要借助子类来创建对象。

OutputStream抽象类是字节输出流的顶级父类。

FileOutputStream类是OutputStream抽象类的子类。

FileOutputStream类能通过new的方式创建对象。

java.io. FileOutputStream

public class FileOutputStream extends OutputStream

构造方法摘要
FileOutputStream(File file)通过File对象创建一个字节输出流。 参数:File file–指定数据输出位置
FileOutputStream(File file, boolean append) 通过File对象创建一个可以追加内容的字节输出流。 参数1:File file–指定数据输出位置 参数2:boolean append–指定是否追加
FileOutputStream(String name) 通过String对象创建一个字节输出流。 参数:String name–指定数据输出位置
FileOutputStream(String name, boolean append) 通过String对象创建一个可以追加内容的字节输出流。 参数1:String name–指定数据输出位置 参数2:boolean append–指定是否追加
package com.Kweilin_Fang.test1;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStream;
public class FileOutputTestClass {
	public static void main(String[] args) throws FileNotFoundException {
		//字节输出流
		//OutPutStream--抽象类
		//FileOutPutStream--构造方法
		//创建文件对象,执行字节输出流制定输出位置		
		File file1=new File("G:"+File.separator+"testfile"+File.separator+"mytest1.txt");
		FileOutputStream fileout1=new FileOutputStream(file1);

		File file2=new File("G:"+File.separator+"testfile"+File.separator+"mytest1.txt");
		FileOutputStream fileout2=new FileOutputStream(file2,true);
		
		String path="G:"+File.separator+"testfile"+File.separator+"mytest1.txt";
		FileOutputStream fileout3=new FileOutputStream(path);
			
		String path1="G:"+File.separator+"testfile"+File.separator+"mytest1.txt";
		FileOutputStream fileout4=new FileOutputStream(path1,true);
		
		//上转型对象创建字节流数处对象
		File file3=new File("G:"+File.separator+"testfile"+File.separator+"mytest1.txt");
		OutputStream fileout5=new FileOutputStream(file3);
		OutputStream fileout6=new FileOutputStream(file3,true);
		
		String path2="G:"+File.separator+"testfile"+File.separator+"mytest1.txt";
		OutputStream fileout7=new FileOutputStream(path2);
		OutputStream fileout8=new FileOutputStream(path2,true);	
	}
}

通过输出流对象写出数据:

voidwrite(byte[] b)将字节数组中的所有数据全部写出到字节输出流中。
voidwrite(byte[] b, int off, int len) 将字节数组中的从off开始len个数据写出到字节输出流中。。
voidwrite(int b) 将一个字节的数据写出到字节输出流中。
voidclose() 关闭字节输出流
package com.Kweilin_Fang.test1;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class FileOutputTestClass2 {
	public static void main(String[] args) throws IOException {
		//字节输出流
		//OutPutStream--抽象类
		//FileOutPutStream--构造方法
		//创建文件对象,执行字节输出流制定输出位置		
		/**
		File file1=new File("G:"+File.separator+"testfile"+File.separator+"mytest1.txt");
		FileOutputStream out1=new FileOutputStream(file1);
		//准备写出的数据
		String infoString="hello你好";
		byte data[]=infoString.getBytes();
		out1.write(data);
		out1.close();
		*/		
		/**
		//第二种方法
		File file1=new File("G:"+File.separator+"testfile"+File.separator+"mytest2.txt");
		FileOutputStream out1=new FileOutputStream(file1,true);
		String infoString="hello你好";
		byte data[]=infoString.getBytes();
		out1.write(data,0,5);
		out1.close();
		*/
		/**
		//第三个写方法 写出一个字符
		File file1=new File("G:"+File.separator+"testfile"+File.separator+"mytest3.txt");
		OutputStream out=new FileOutputStream(file1,true);
		out.write(97);
		out.close();
		*/
		
		//拓展写出一串数据 循环方法
		File file1=new File("G:"+File.separator+"testfile"+File.separator+"mytest4.txt");
		OutputStream out=new FileOutputStream(file1,true);
		String info="hello world";
		byte by[]=info.getBytes();
		for (byte b : by) {
			out.write(b);
		}
		out.close();
	}
}

6.字节输入流【读取数据】

在java我们使用InputStream类表示一个字节输入流。

InputStream类是一个抽象类,不能通过new的方式创建对象,需要借助子类来创建对象。

InputStream抽象类是字节输入流的顶级父类。

FileInputStream类是InputStream抽象类的子类。

FileInputStream类能通过new的方式创建对象。

构造方法摘要
FileInputStream(File file) 通过File对象创建一个字节输入流对象。 File file—指定输入位置
FileInputStream(String name) 通过String对象创建一个字节输入流对象。 String name—指定输入位置
package com.Kweilin_Fang.test1;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;

public class FileInputStreamClass {
	public static void main(String[] args) throws FileNotFoundException {
		// 字节输入流
		//InputStream抽象类
		//构造方法
		File file=new File("G:"+File.separator+"testfile"+File.separator+"myfile1.txt");
		FileInputStream filein1=new FileInputStream(file);
		
		String path="G:"+File.separator+"testfile"+File.separator+"myfile1.txt";
		FileInputStream filein2=new FileInputStream(path);
		
		//上转型对象建立字节流输入对象
		File file1=new File("G:"+File.separator+"testfile"+File.separator+"myfile1.txt");
		InputStream filein11=new FileInputStream(file1);
		
		String path1="G:"+File.separator+"testfile"+File.separator+"myfile1.txt";
		InputStream filein22=new FileInputStream(path1);
	}
}

通过字节输入流读取数据:

intread()从此输入流中读取一个数据字节。 返回值下一个数据字节,如果已到达文件末尾,则返回 -1。
intread(byte[] b) 将数据读取到字节数组中。 返回值是读取的字节总数,如果到达文件末尾返回-1。
intread(byte[] b, int off, int len)将数据读取到的数据保存在字节组的off位置和len个数据 返回值是读取的字节总数,如果到达文件末尾返回-1。
voidclose() 关闭字节输入流
package com.Kweilin_Fang.test1;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;

public class FileInputStreamClass2 {
	public static void main(String[] args) throws Exception {
		// 字节输入流读取数据操作动作
		/**
		//int	read(byte[] b) 将数据读取到字节数组中。 返回值是读取的字节总数,如果到达文件末尾返回-1。
		File file1=new File("G:"+File.separator+"testfile"+File.separator+"mytest4.txt");
		FileInputStream in1=new FileInputStream(file1);
		//创建一个保存读取的字节数组,不浪费空间可以使用文件对象的字节长度的犯法
		byte data[]=new byte[(int) file1.length()];
		int len=in1.read(data);
		//将保存的字节数据转换成String,输出
		String info=new String(data,0,len);
		System.out.println("读取道德数据是=="+info);
		in1.close();
		*/
		
		/**
		File file1=new File("G:"+File.separator+"testfile"+File.separator+"mytest4.txt");
		FileInputStream in1=new FileInputStream(file1);
		byte data[]=new byte[(int) file1.length()];
		int len=in1.read(data,4,4);
		//将保存的字节数据转换成String,输出
		for (byte b : data) {
			System.out.println(b);
		}
		String info=new String(data,0,data.length);
		System.out.println("读取到的数据是=="+info);
		in1.close();
		*/
		/**
		File file1=new File("G:"+File.separator+"testfile"+File.separator+"mytest4.txt");
		InputStream in1=new FileInputStream(file1);
		int data=in1.read();
		System.out.println("读取的一个字节数据=="+data);
		in1.close();
		*/
		File file1=new File("G:"+File.separator+"testfile"+File.separator+"mytest4.txt");
		InputStream in1=new FileInputStream(file1);
		//准备保存数据的字节数组
		byte []data=new byte[(int)file1.length()];
		//保存读取来的字节数据对应的整数数量
		int temp=0;
		//定义保存数组下标的变量
		int len=0;
		while ((temp=in1.read())!=-1) {
			data[len]=(byte)temp;
			len++;
		}
		//将保存的字节数据转换成String输出
		String info=new String(data,0,data.length);
		System.out.println("读取到的字节数据是=="+info);
		in1.close();
	}

}

案例:

​ 将指定位置照片转义至另外一个文件夹

package com.Kweilin_Fang.test1;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class CopyImgClass {
	public static void main(String[] args) throws Exception {
		//读取图片位置
		File file1=new File("G:"+File.separator+"文件夹名称"
					+File.separator+"文件夹名称"+File.separator+"无标题.png");
		//读取存放图片的位置
		File file2=new File("G:"+File.separator+"testfile"+File.separator+"无标题.png");
		//字节输入流
		InputStream in1=new FileInputStream(file1);
		OutputStream out1=new FileOutputStream(file2);
		//创建一个保存读取的字节数组,不浪费空间可以使用文件对象的字节长度的方法
		byte byimg[]=new byte[(int) file1.length()];
		int len=in1.read(byimg);
		out1.write(byimg);
		in1.close();
		out1.close();
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值