java实现files创建输入流_Java I/O输入输出流操作(一)

如何在Java中进行文件的读写,Java IO流是必备的知识。在本文章中就对文本编码问题,File类常用API,遍历目录,RandomAccessFile基本操作,字节流进行简要介绍.

1.编码问题

首先介绍三种编码

1.GBK编码:中文占用2个字节,英文占用1个字节

2.UTF-8编码:中文占3个字节,英文占用1个字节

3.UTF-16be编码:中文占2个字节,英文占用2个字节

java字符,在Java内部都是用两个字节表示的,使用的是UTF-16be编码.

在java编程中,将字符转换成字节序列用的是项目默认的编码gbk.

使用getBytes();方法实现字符转换为字符序列,通过设置参数选择编码的方式.如下图

e94bb4550554?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

图片.png

当你的字节序列是某种编码时,这个时候想把字节序列变成字符串,也需要用这种编码方式,否则会出现乱码。

e94bb4550554?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

图片.png

e94bb4550554?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

图片.png

可见由于项目默认的编码gbk. bytes4为UTF-16be编码序列,所以会出现乱码.

2.File类常用的API

java.io.File类用于表示文件或目录,File类只用于文件或目录的信息、名称、大小等,不能用于文件内容的访问

1.f.exists() 查看文件(目录)是否存在

创建:

1, 目录(文件夹)的创建: f.mkdir( );

2, 文件的创建: f.createNewFile( );

删除 f.delete( );

判断:

判断是否是目录: f.isDirectory( );

判断是否是文件: f.isFile( );

获得文件名称: f.getName( );

获得上级路径: f.getParent( );

代码实现如下图:

e94bb4550554?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

图片.png

遍历目录

遍历目录使用File类的list();方法

file.list()返回文件(目录)名,list不包括子目录的文件

file.listFiles返回文件(目录)的抽象(对象)

遍历所有文件、目录,使用递归方式,如下图

e94bb4550554?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

图片.png

4.RandomAccessFile基本操作

RandomAccessFile java提供对文件内容的访问,既可以读文件,也可以写文件

RandomAccessFile支持随机访问文件,可以访问文件的任意位置

1.java文件模型

在硬盘上的文件是一个字节一个字节存储的,是数据的集合

2.打开文件

有两种模式“rw”(读写)“r”(只读)

RandomAccessFile raf = new RandomAccessFile(file,"rw")

文件指针,打开文件时指针在开头pointer = 0;

3.写方法

raf.write(int)--->只写一个字节(高8位),同时指针指向下一个位置,准备再次写入

4.读字节

int b = raf.read()--->读一个字节

5.文件读写完成以后一定要关闭

6.读文件,须把指针移到文件头部:raf.seek(0);

代码如下图

e94bb4550554?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

图片.png

4.字节流

I/O输入输出流主要分为两大类字节流与字符流.

字节流

InoutStream抽象了应用程序读取数据的方式

OutputSteram抽象了应用程序写出数据的方式

2.EOF = End 读到-1就读到结尾

3.输入流基本方法

int b = in.read();读取一个字节无符号填充到int低八位。-1是EOF

in.read(byte[] buf);读取数据填充到字节数组buf

in.read(byte[] buf,int start,int size);读取数据导字节数组buf,从buf的start位置开始存放size长度的数据

4.输出流基本方法

out.write(int b) 写出一个byte到流,b的低8位

out.write(byte[] buf) 将buf字节数组都写入到流

out.write(byte[] buf,int start,int size)

5.FileInputStream--->具体实现了在文件上读取数据

6.FileOutputStream 实现了向文件中写入byte的数据方法

把文件作为字节流操作

e94bb4550554?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

图片.png

读取文件中的字节放在字节数组中

e94bb4550554?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

图片.png

通过复制文件,练习写入文件操作

e94bb4550554?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

图片.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值