java-IO操作详解

java中提供的IO是阻塞式IO并提供了5个关于IO操作的类File、OutputStream、inputStream、Reader、Wirter

File

java.io包中。
File针对的式文件本身,及对文件进行创建,删除,取得路径等操作。于文件内容无关。
File类可以描述真实的文件也可以描述路径,或者文件夹
1.File的实例化构造方式

public File(String pathname)//绝对路径
public File(String parent, String child)//父路径和子路径 

2.判断文件或者路径是否存在

public boolean exists()

3.创建新文件

public boolean createNewFile() throws IOException
//创建新文件,要求之间实例化的File为全路径,及绝对路径。

举个例子:


import java.io.File;
import java.io.IOException;
public class Test{	
	public static void main(String[] args){
		//取得File对象
		File file = new File("C:\\Users\\lenovo\\Desktop\\mytext.txt");
		//这里注意因为linux下,和windows下路径分隔符是不一样的。所以这里提倡使用File.separator来代替实际的分隔符。又系统判断应选择何种分隔符。
		try {
		file.createNewFile();
		} catch (IOException e) {
		e.printStackTrace();
		}
	}
}

4.删除路径
public boolean delete()
5.取得父路径以及父File对象

public String getParent()
public File getParentFile()

6.创建目录
创建目录可以一次性创建多层目录,从找得到的最上层存在的目录开始向下一次性创建完成。

public boolean mkdirs()

7.取得文件信息
判断File对象是否是文件public boolean isFile()
判断File对象是否是路径public boolean isDirectory()
取得文件大小-字节单位public long length()
取得文件最后修改日期public long lastModified()
列举一个目录的全部组成public File[] listFiles()

输入输出字节流 InputStream OutputStream

字节流是原生的传输操作,无论是网络传输还是磁盘数据保存均是以字节为单位。字节流存储的是byte
操作步骤:
1.取得file对象
2.取得file对象对应的输入输出流
3.进行数据的读取和写入
4.关闭流

OutputStream

字节的输出流。想文件中写入。
1.输出方法:
将指定的字节数组全部输出到终端:public void write(byte b[]) throws IOException
将部分字符数据输出:参数:字符数组,开始点,长度public void write(byte b[], int off, int len) throws IOException输出单个字节:public abstract void write(int b) throws IOException;
2.要进行文件内容的输出,使用FileOutputStrean
文件内容覆盖public FileOutputStream(File file) throws FileNotFoundException
文件内容追加public FileOutputStream(File file, boolean append)throws FileNotFoundException

InputStream

字节的输入流。从文件中读取。
1.输入方法:
read最常用方法读取数据到字节数组中
-参数读取到b,返回值: 返回b长度:读取的数据大小>字节数组大小 返回字节数组大小
返回>0但是<b长度:读取的数据大小<字节数组大小 返回真正读取个数 返回-1: 读取数据为0
public int read(byte b[]) throws IOException
读取部分数据到字界数组中public int read(byte b[], int off, int len) throws IOException
读取单个字节 public abstract int read() throws IOException;

输入输出字符流Reader Writer

和字节流相比。字符流是加工过的类型,只适用于中文文本时才会使用到字符流。字符流存储的是char

Reader

没有方法可以直接读取字符串,只能通过字符数组来读取
public FileReader(File file) throws FileNotFoundException

public int read(char cbuf[]) throws IOException 
public int read(char cbuf[], int off, int len) throws IOException;

Writer

除了参数为字符数组外,多了一个传入String对象的方法
public void write(String str) throws IOException

转换流

我们利用转换流完成从字节流到字符流的转换。OutputStreamWriter InputStreamReader
通过构造方法:
public OutputStreamWriter(OutputStream out)
public InputStreamReader(InputStream in)
举个例子:

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
public class Test2 {
	public static void main(String[] args) throws Exception{
		File file = new File("C:"+File.separator+"Users"+File.separator+"lenovo"+File.separator+"Desktop"+File.separator+"mytext.txt");
		if(!file.exists()){
			file.createNewFile();
		}
		OutputStream outputStream = new FileOutputStream(file);
		OutputStreamWriter out = new OutputStreamWriter(outputStream);
		out.write("你好啊,好啊");
		out.close();
	}
}

字符编码

我们使用字节流的时候。可以选定字符编码格式。就是将
new String(“字符集”).getBytes("字符编码");这样获得的的字节数组就是按照规定编码格式编辑的了。
常见的字符编码集有:
1.GBK ,GB2312:这是国际规定的编码格式,GBK包含简体中文和繁体中文。GB2312仅包含简体中文。
2.UNICODE:java提供的16进制编码。可以描述世界上任意一种语音,但是,,,体积大,网络负担重。
3.IOS8859-1:浏览器默认编码,国际通用。不支持中文。
4.UTF:UTF-8 UTF-16相当于结合了IOS8859-1和UNICODE编码,及支持所有语言又体积小。

内存流

字节内存流 ByteArrayInputStream,ByteArrayOutputStream
字符内存流 CharArrayReader,CharArrayWriter
这里就不需要执行文件,因为对象唯一就是内存。所有构造不需要这一参数。
举个例子:

public class Test2 {
	public static void main(String[] args) throws Exception{
		String msg = "hello ni ni ni";
		ByteArrayInputStream in = new ByteArrayInputStream(msg.getBytes());
		ByteArrayOutputStream out = new ByteArrayOutputStream();
		int len = 0;
		while((len = in.read())!=-1){
			out.write(Character.toUpperCase(len));
		}
		System.out.println(out);
	}
}

打印流

系统提供两种打印流
1.printStream:字节打印流
2.printWriter:字符打印流
实际上就是对其write方法进行了一层封装。扩展了功能,应用的是基于抽象类的装饰设计模式。

System对IO的支持

标注输出(显示器)System.out -PrintStream-打印流对象
错误输出System.err -PrintStream -打印流对象
错误输出从本质上和标注输出只是输出的内容颜色不一样。

System.in -InputStream -输入流对象 -只能接收字节

两种输入流

升级System.in
1.BufferedReader
2.Scanner
再java.util包中。可以接收input或者reader

Scannner

1.判断是否有指定类型输入XXX-表示类型
public boolean hasNextXXX()
如:

public boolean hasNextByte() 
public boolean hasNext(Pattern pattern) //正则表达式

2.取得指定类型数据 XXX-表示类型
public String nextXXX()
3.自定义分隔符
public Scanner useDelimiter(Pattern pattern)

Scanner scanner = new Scanner(System.in);
scanner.next();
©️2020 CSDN 皮肤主题: 技术工厂 设计师:CSDN官方博客 返回首页