Java中的IO部分(三)

Java中的IO部分(三)
File类不负责对文件的输入和输出处理,输入和输出是由输入流和输出流处理。
包括字节流和字符流
字节流和字符流的区别:字节流是原生的操作,字符流是经过处理的,在你进行网络数据传输,以及磁盘数据保存,所保存的支持的类型是字节流,而所有磁盘中的数据必须先读取到内存后才可以进行操作。内存里面会帮助我们将字节变成字符。字符更适合处理中文。
字节流分成:inputStream,outputStream
字符流分成:Reader,Writer
无论是字节流还是字符流,操作流程都是固定的,以文件操作为例。
步骤如下:
1.根据文件路创建File类对象
2.根据字节流或者字符流的子类实例化父类对象
3.进行文件的读取或者写入操作。
4.关闭流(close())
IO流属于资源处理(包括网络资源,数据库资源),所有资源处理操作最后都要关闭。如果你没有在项目中进行关闭,这种关闭操作就再也执行不了了。
字节输出流
Java.io.outputStream类
首先先观察outputStream类,public abstract class OutputStream extends Object implements Closeable,Flushable
Java中的IO部分(三)_第1张图片
其中Closeable中包含:public void close() throws IOExpection;方法
其中Flushable中包含:public void flush() throws IOExpection;方法
OutputStrea中的方法包括:
1.public void Write(byte[] b)throws IOExpection将给定的字节数组全部输出
2.public void Write(byte[] b,int off,int len)throws IOExpection将部分的字节数组输出 最常用
2.public abstract void Write(byte b)throws IOExpection输出单个字节
outputStream类是一个抽象类,需要子类为父类实例化,因为方法名称都已经被父类定义好了,所以此处我们为关注的是子类的构造方法。如果使用文件的操作,可以使用FileOutputStream这个类进行处理,这个类的构造方法:
1.接收File类(覆盖)public FileOutputStream**(File file)throws FileNotFoundException
2.追加内容:public FileOutputStream
(File file,boolean append)**throws FileNotFoundException
append 为True表示追加,如果为False
实例:实现文件内容的输出,代码如下:

package com.se.core;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;

public class TestDemo {
	public static void main(String[] args) throws Exception {
	File file=new File("d:"+File.separator+"abc"+File.separator+"hell.txt");//通过File类定义路径
	if(!(file.getParentFile().exists()))//如果父路径不存在
		{file.getParentFile().mkdirs();}//创建父路径
	OutputStream out=new FileOutputStream(file,true);//通过file对象,true表示追加内容,而不是覆盖内容
	String s="helloworld \n\r";//如果想换行,必须加入 \n\r
	out.write(s.getBytes());//将字符串进行字符转换
	out.close();//关闭流
			}
		
		}

注:在此方法中没有创建文件createFile(),实际上系统自动创建文件。
字节输入流InputStream 类
首先来看继承关系, public abstract class InputStream extends object implements Closeable 只实现了Closeable 接口,InputStream 类提供的方法如下:
1.读取数据到字节之中:public int read(byte[] b)throws IOException返回数据的读取个数。
如果此时开辟的字节数组比读取数据大,返回是读取个数
如果读取的数据大于字节数组,返回的就是数组长度,如果没有数据还继续读,返回-1
2.读取部分数据到字节之中:public int read(byte[] b,int off,int len)throws IOException
每次是读取数组的部分内容,如果读取满了,返回长度(len),如果没有读取满,返回的就是读取额个数,如果读取到最后没有数据,返回-1
3.读取单个字节:public abstract int read( )throws IOException
每次都读取一个字节,读取完了返回-1
InputStream 类是抽象类,要由子类FileInputStream 类实现
实例:实现文件的读取;

package com.se.core;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
public class TestDemo {
	public static void main(String[] args) throws Exception {
	File file=new File("d:"+File.separator+"abc"+File.separator+"hell.txt");//通过File类定义路径
if(file.exists()){//确保文件的存在
	InputStream input=new	FileInputStream(file);//用子类对父类进行实现
	byte[] b=new byte [1024];//这个是用来读入的数据存储的,每次最大读取数量
	input.read(b);//实现读操作,此时数据读取在数组中
	System.out.println(new String(b));//把字符数组转化为字符串输出
	input.close();//关闭流
}
			}
		
		}

实际上,InputStream 和OutputStream 类在方法操作上基本类似,InputStream 中加入字符数组,是为了在读取的时候保证一点一点读取,要不容易带来一系列问题。

你可能感兴趣的:(JAVA)