薛彬的博客 Xue bin's Personal Growth Website

Java学习笔记---IO流笔记

2016-02-17
薛彬

在学习hadoop的时候遇到了IO流,就拿出IO流的相关知识复习一遍。

IO流,顾名思义就是Input/Output流,也就是输入输出流。

关于流:

  • 一种有顺序的,有起点,有终点的字节集合。
  • 对数据传输的总称。
  • 本质就是:数据传输。

分类

按照流向

输入流:从一个源读取数据。 输出流:向一个目标写数据。

按照数据单位

字节流:以字节为单位(8位二进制) 字符流:以字符为单位(16位二进制)

两个重要的流是FileInputStream 和FileOutputStream

两个重要的流

FileInputStream

这个流是用于从文件读取数据。比如:

可以使用字符串类型的文件名来创建一个输入流对象来读取文件:

InputSteam in=new FileInputStream(url);

创建好InputStream对象后,就可以使用下面的方法来读取流或者其他操作:

in.read(int r) //读取制定字节的数据,返回int值。
in.close();//关闭流

我们可以这样一个个字节的读取一个文件:

public static void main(String[] args) {	
	try {
		//创建一个字节输入流对象
		InputStream in=new FileInputStream("D:\\test.txt");
		int b=-1;
		while((b=in.read())!=-1)//字节读取,当为-1时读取完毕
		{
			System.out.print((char)b);//转化为字符输出
		}
		in.close();//关闭流
	} catch (FileNotFoundException e) {
		e.printStackTrace();
	} catch (IOException e) {
		e.printStackTrace();
	}
}

这样一个个读取字节就显得速度很慢,我们可以这样一次性读取全部字节:

public static void main(String[] args) {
	try {
		File file=new File("D:\\test.txt");
		//创建一个字节输入流对象	
		InputStream in=new FileInputStream(file);
		//根据文件大小来创建字节数组
		byte[]bytes=new byte[(int)file.length()] ;
		int len=in.read(bytes);//返回读取字节的长度
		System.out.println("读取字节长度为:"+len);
		System.out.println("读取的内容为: "+new String(bytes));//构建成字符串输出
		in.close();//关闭流
	} catch (FileNotFoundException e) {
		e.printStackTrace();
	} catch (IOException e) {
		e.printStackTrace();
	}
}

如果我们修改上面这段代码中的byte[]bytes=new byte[(int)file.length()]改为byte[]bytes=new byte[int m],也就是:

public static void main(String[] args) {
	try {
		//创建一个字节输入流对象
		InputStream in=new FileInputStream("D:\\test.txt");
		//指定每次读取的大小--可根据性能字节修改
		byte[]bytes=new byte[8] ;
		StringBuffer sb=new StringBuffer();
		int len=-1;//每次读取的实际长度
		while((len=is.read(bytes))!=-1){
			sb.append(new String(bytes,0,len));
		}
		System.out.println("读取字节为:"+sb);
		in.close();//关闭流
	} catch (FileNotFoundException e) {
		e.printStackTrace();
	} catch (IOException e) {
		e.printStackTrace();
	}
}

这样我们就可以读取制定字节的数据了。

FileOutputStream

这是一个用来向文件中写入数据的流。

同样,我们可以这样创建FileOutputStrem对象:

OutputStream out =new FileOutputStream(url);

这个流也有一些方法来写入或者其他操作:

out.write(int w); //把制定字节写到输出流中。
out.close(); //关闭流。

评论