FileIO

FileI/O

什么是流

流,是指一连串的流动的字符,是以先进的方式发送和接受数据的通道。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UhULhQfE-1626682565960)(F:\Typora文件\IO流.JPG)]

输入流::只能读取数据

输出流:只能写入数据

按照操作的数据单元格不同又可以分为字节流字符流

如何区分字节流与字符流

字节流的最小单元格为8位的字节,而字符流的最下单元格为16为的字符

字节流通常用于二进制的文件,而字符流用于文本。他们的用法几乎一模一样。

按照""的流向还可以换分为输出流输入流

字节的输入流:InputStream基类

字节的输出流:OutputStream基类

字符的输入流:Reader基类

字符的输出流:Writer基类

以字符的为例

字符的输入

package cn.bdqn.hClass.Sl;

import java.io.FileReader;
import java.io.IOException;

public class ReaderStream {
	public static void main(String[] args) {
		FileReader fdr = null;
		try {
			fdr=new FileReader("F:\\FileMethods\\hello.txt");//文件路径
			char[] aChar  = new char[32];//声明数组
            //获取这个文件的大小
			int hasReader =0;	
            //判断条件 Read()方法读取文件如果读取不到会返回-1
			while ((hasReader=fdr.read(aChar))!=-1) {
				System.out.println(new String(aChar, 0 , hasReader));//new strign对象实现输出 String(赋值的数组,开始的位置,结束的位置 );
			}
			//IO的错误必须
		} catch (IOException e) {
				e.printStackTrace();
		}finally {
			try {
                //关闭输入流 不关的话会消耗系统资源
				fdr.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		
	}
}

效果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K9BrY5M7-1626682565962)(F:\截图\QQ图片20210719111209.png)]

字符的输出

package cn.bdqn.hClass.Sl;

import java.io.FileWriter;
import java.io.IOException;

public class FileWriterTest {
	public static void main(String[] args) {
        //获取文件的路径 加true 可以保留文件里的原来的东西
		try(FileWriter fw  = new FileWriter("F:\\FileMethods\\hello.txt",true)){
            //先给想打印的东西赋值给变量
			String aString = "\n我是格里弗斯,闻到老子的狐臭了没有";
			System.out.println();//换行
            //输出
			fw.write(aString);
			} catch (IOException e) {
				e.printStackTrace();
		}
	}
}

效果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tYampwMC-1626682565964)(F:\截图\QQ图片20210719111353.png)]

使用字节流读文本的步骤

package cn.bdqn.hClass.Sl
import java.io.File;

public class FileMethods {
	public static void main(String[] args) {
    //创建FileMethods对象
	FileMethods fm = new FileMethods();
    //获取文件路径
	File  file = new File("F:\\FileMethods\\hello.txt");
    //调用showFileInfo方法传入文件路径
	fm.showFileInfo(file);
	}
	/**
	 * 显示文件信息
	 */
	public  void showFileInfo(File file) {
		if(file.exists()) {
			if(file.isFile()) {
				System.out.println("名称  "+file.getName());
				System.out.println("相对"+file.getPath());
				System.out.println("文件大				小"+file.length()+"字节");
			}
		}else {
			System.out.println("文件不存在");
		}
	}
}

使用什么字节流更高效

可以用read()方法从输入流批量读取若干个字节,可以减少物理读文件或键盘的次数,提高输入/输出效率。

例如:

read(byte[]b)read(byte[]b,int off,int len)

File类的常用方法

方法名称说明
boolean exists()判断目录或者文件是否存在
boolean isFile()判断是否是文件
boolean isDirectory()判断是否是目录
String getPath()返回此对象表示的相对路径
String getAbsolutePath()返回此对象表示的绝对路径
String getName()返回此对象表示的文件或目录名称
boolean delete()删除此对象指定的文件或目录
boolean createNewFile()创建名称的空文件,不创建文件夹
long length()返回文件的长度,单位为字节,若文件不存在,返回OL
mkdir()创建目录

读取数据的常用方法

方法名说明
int read()读取一个字节
int read(byte[] b )将数据读取到字节数组中
int read(byte[] b, int off,int len)从输入流中读取最多的len长度字节,保存到字节数组b中,保存位置从off开始
void close()关闭输入流
int available()返回输入流读取的估计字节数

OutputStream类的常用方法

方法名说明
void write(int c)写入一个字节数据
void write(byte[] b buf)写入数组buf的所有字节
void write(bute[] b,int off,int len)将字节数组中从off位置开始,长度为len的字节数据输出到流中
void close()关闭输入流

Reader类的常用方法

方法名说明
int read()从输入流中读取单个字符的长度
int read(byte[] b)从输入流中读取c.length长度的字符,保存到数组c中,返回实际的字符数
read(char[] c,int off,int len)从数据流中读取最多的len的长度字符,保存到字符数据组c中,保存位置从off开始,len结束
void close()关闭流

writer类常用方法

方法名说明
writer(String str)将str字符串里包含的字符输出到指定的输出流
writer(String str,int off,int len)将str字符串里从off位置开始长度len结束
void close()关闭输出流
void flush()刷新输出流

二进制文件的读写

1.使用字节流(DataInputStream)读取

FileInputStream fis=new FileInputStream("C:\Users\jijia\Desktop\Text\txt.txt");

DataInputStream dis=new DataInputStream(fis);

2.使用字节流(DataOutputStream)写入

FileOutputStream fos=new FileOutputStream("C:\Users\jijia\Desktop\Text\txt1.txt");

DataOutputStream out=new DataOutputStream(fos);

DataInputStream(fis);




2.使用字节流(DataOutputStream)写入

```java
FileOutputStream fos=new FileOutputStream("C:\Users\jijia\Desktop\Text\txt1.txt");

DataOutputStream out=new DataOutputStream(fos);
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值