java笔记-IO技术1

1.核心类

说明
File文件类
InputStream字节输入流
OutputStream字节输出流
Reader字符输入流
Writer字符输出流
Closeable关闭流接口
Flushable刷新流接口
Serializable序列化接口

1.1 字节流
字节流
1.2 字符流
字符流

  • 字节流:按照字节读取数据(InputStream、OutputStream)
  • 字符流:按照字符读取数据(Reader、Writer),因为文件编码的不同,从而有了对字符进行高效操作的字符流对象;
  • 原理:底层还是基于字节流的操作,自动搜寻了指定的码表;
  1. File类
    我们的文件存储在硬盘中,但是Java程序并不能直接操作硬盘,所以java通过虚拟机操作OS(操作系统),实现对硬盘中文件的读写操作,File就是建立Java–与--硬盘中文件的联系。
    File这里可能为文件或者是文件夹。File代表一个抽象的表示形式。
  2. 路径的书写
    不同的操作系统,分割符不同,’‘或’/’
public class PathDemo01 {
    public static void main(String[] args) {
        String path = "F:\\JAVAcode\\Test_IO\\photo.jpg";
        System.out.println(File.separatorChar);
        //方式1
        //使用'/',建议用此方法
        path = "F:/JAVAcode/Test_IO/photo.jpg";
        System.out.println(path);
        //方式2
        //使用系统分隔符File.separator
        path = "F:"+File.separator + "JAVAcode" + File.separator + "Test_IO"+ File.separator + "photo.jpg";
        System.out.println(path);
    }

输出:

\
F:/JAVAcode/Test_IO/photo.jpg
F:\JAVAcode\Test_IO\photo.jpg
  1. 构建File对象
        //构建File对象,有三种构造器
        String path = "F:/JAVAcode/Test_IO/photo.jpg";
        File src = new File(path);
        System.out.println(src.getParent());
        System.out.println(src.length());

        //当前目录
        System.out.println(System.getProperty("user.dir"));
F:\JAVAcode\Test_IO
135083
F:\JAVAcode\Test_IO

File API说明

API说明
pathSeparator separator路径|路径分隔符
File(String parent, String child)
File(File parent, String child)构造器
File(String pathname)构造器
getName() get path()文件名,路径名
getAbsolutePath()
getParent()
exists(), isFile(), isDirectory()判断状态
length()文件长度
createNewFile(), delete()创建新文件, 删除文件
  1. 文件夹创建–遍历
API说明
mkdir(),madirs()创建目录,如果父目录链不存在,则一同创建
list()下级名称
listFiles下级File
listRoots()根路径

mkdir():要确保上一级目录必须存在;
mkdirs():上一级目录若不存在,则一同创建;

  1. 编码
    每个文件都有自己的编码格式,ASCII, UTF-8(可变长度编码), UTF-16(固定长度);
		//编码:字符-->字节 
		String s = "小明和小红";
		// 编码 字节数组
        byte[] datas = s.getBytes();
        System.out.println(datas.length);

Output:

15
  1. 解码
	//解码:字节-->字符
	//接着上面的代码,还原
	//解码:字符串String(byte[] bytes, int offset, int length, String charsetName)
	s = new String(datas,0,datas.length, StandardCharsets.UTF_8);
        System.out.println(s);

Output:

	小明和小红

乱码问题:
(1) 字节数不够

	s = new String(datas,0,datas.length-2, StandardCharsets.UTF_8);
        System.out.println(s);

Output:
输出结果--最后一个字由于字节数不够,导致乱码
(2) 字符集不统一

        s = new String(datas,0,datas.length-2, Charset.forName("gbk"));
        System.out.println(s);

Output:
输出结果:由于字符集不统一,造成乱码

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值