Java IO专题
来源:互联网 发布:阿里云ftp连不上 编辑:程序博客网 时间:2024/05/07 01:59
Java IO专题
1. 编码问题--> gbk编码 中文占用两个字节 英文占用一个字节
utf-8编码 中文占用三个字节 英文占用一个字节
utf-16be编码 中文占用两个字节 英文占用两个字节
当你的字节序列是某种编码时,这个时候想把字节序列变成字符串,也需要用这种编码方式,
否则会出现乱码;
例子:
String s="你好ABC";
byte[] byte1 = s.getBytes();// 默认编码
byte[] byte2 = s.getBytes("gbk");//gbk编码
byte[] byte3 = s.getBytes("utf-8");//utf-8编码
byte[] byte4 = s.getBytes("utf-16be");//utf-16be编码
String s1 = new String(byte1);//默认解码,显示正常
String s3 = new String(byte3);// 乱码
String s3 = new String(byte3,"utf-8");//以utf-8解码,显示正常
2. File类的使用(常见Api)-->java.io.File
File类只用于表示文件(目录)的信息(名称,大小等),不能用于文件内容的访问
File.separator --> 分隔符
File.exists()---> 文件(目录)是否存在
File.mkdir()/mkdirs()---> 新建目录
File.delete()---> 删除
File.isDirectory()--> 是否是目录,如果是目录返回true,如果不是目录或者目录不存在返回false
File.isFile()--> 是否是文件
File.createNewFile()--> 创建文件
File.getAbsolutePath()-->文件绝对路径
File.getName()-->文件名字
File.list()--->获取File目录下的所有文件名称 (string[])
File.listFiles()-->获取File目录下的所有文件(File[])
3. RandomAccessFile java提供的对文件内容的访问,可以读写文件,可以随机访问文件(可以访问文件任意位置)
1) java文件模型:在硬盘上的文件是byte byte byte存储的,是数据的集合
2) 打开文件
有两种模式“rw”,“r”
RandomAccessFile raf = new RandomAccessFile(File,"rw");
文件指针,打开文件时指针在开头,pointer=0-->raf.getFilePointer()
3) 写方法:
raf.write(int)-->只写一个字节(后8位),同时指针指向下一个位置
4) 读方法:
raf.seek(0);//把指针移到头部
int b=raf.read(int)-->读一个字节
5) 文件读写完成以后一定要关闭
raf.close();
4. IO流(输入流、输出流)
字节流、字符流
一、字节流
1)InputStream、OutputStream
InputStream --> 抽象了应用程序读取数据的方式
OutputStream--> 抽象了应用程序写出数据的方式
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位置开始存放
4) 输出流的基本方法
out.write(int b);//写出一个byte到流,b的低8位
out.write(byte[] buf);//将buf字节数组都写到流
out.write(byte[] buf,int start,int size);
5) FileInputStream--> 具体实现了在文件上读取数据
FileOutputStream--> 具体实现了在文件上写出byte数据
6) DataInputStream
DataoutputStream
对流功能的扩展(装饰模式),可以更加方便地读取int、long、字符等类型数据
DataOutputStream writeInt()/writeDouble()/writeUTF()/writeChars()
--->DataOutputStream dos= new DataOutputStream(new FileOutputStream(file));
DataInputStream readInt()/readDouble()/readUTF()/readChars()
--->DataInputStream is= new DataInputStream(new FileInputStream(file));
7) BufferedInputStream/BufferedOutStream
这两个流类为IO提供了带缓冲区的操作,一般打开文件进行写入或者读取操作时,都会加入缓存,提高了IO性能。
从应用程序中把输入放入文件,相当于把一缸水倒入另外一个缸中;
FileOutputStream-->write() 相当于一滴一滴地把水转移过去
DataOutputStream-->writeXXX()方法会更加方便一些,相当于一瓢一瓢地把水转移过去
BufferedOutStream-->write() 相当于一瓢瓢倒入桶中,然后再由桶导入另外一个缸中,提高性能
二、字符流
1) 编码问题
2) 认识文本和文本文件
java的文本(Char)是16位无符号整数,是字符的unicode编码(双字节编码);
文件是byte byte byte...的数据序列
文本文件是文本(char)序列按照某种编码方案(gbk、utf-8...)序列化为byte的存储
3) 字符流(Reader Writer)--->操作文本文件
字符的处理,一个处理一个字符
字符的底层依然是基本的字节序列
字符流的基本实现
InputStreamReader 完成byte流解析为char流,按照编码解析
---> InputStreamReader isr= new InputStreamReader(new FileInputStream(file));
OutputStreamWriter 按照char流到byte流,按照编码处理
FileReader/FileWriter
BufferedReader/BufferedWriter
1. 编码问题--> gbk编码 中文占用两个字节 英文占用一个字节
utf-8编码 中文占用三个字节 英文占用一个字节
utf-16be编码 中文占用两个字节 英文占用两个字节
当你的字节序列是某种编码时,这个时候想把字节序列变成字符串,也需要用这种编码方式,
否则会出现乱码;
例子:
String s="你好ABC";
byte[] byte1 = s.getBytes();// 默认编码
byte[] byte2 = s.getBytes("gbk");//gbk编码
byte[] byte3 = s.getBytes("utf-8");//utf-8编码
byte[] byte4 = s.getBytes("utf-16be");//utf-16be编码
String s1 = new String(byte1);//默认解码,显示正常
String s3 = new String(byte3);// 乱码
String s3 = new String(byte3,"utf-8");//以utf-8解码,显示正常
2. File类的使用(常见Api)-->java.io.File
File类只用于表示文件(目录)的信息(名称,大小等),不能用于文件内容的访问
File.separator --> 分隔符
File.exists()---> 文件(目录)是否存在
File.mkdir()/mkdirs()---> 新建目录
File.delete()---> 删除
File.isDirectory()--> 是否是目录,如果是目录返回true,如果不是目录或者目录不存在返回false
File.isFile()--> 是否是文件
File.createNewFile()--> 创建文件
File.getAbsolutePath()-->文件绝对路径
File.getName()-->文件名字
File.list()--->获取File目录下的所有文件名称 (string[])
File.listFiles()-->获取File目录下的所有文件(File[])
3. RandomAccessFile java提供的对文件内容的访问,可以读写文件,可以随机访问文件(可以访问文件任意位置)
1) java文件模型:在硬盘上的文件是byte byte byte存储的,是数据的集合
2) 打开文件
有两种模式“rw”,“r”
RandomAccessFile raf = new RandomAccessFile(File,"rw");
文件指针,打开文件时指针在开头,pointer=0-->raf.getFilePointer()
3) 写方法:
raf.write(int)-->只写一个字节(后8位),同时指针指向下一个位置
4) 读方法:
raf.seek(0);//把指针移到头部
int b=raf.read(int)-->读一个字节
5) 文件读写完成以后一定要关闭
raf.close();
4. IO流(输入流、输出流)
字节流、字符流
一、字节流
1)InputStream、OutputStream
InputStream --> 抽象了应用程序读取数据的方式
OutputStream--> 抽象了应用程序写出数据的方式
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位置开始存放
4) 输出流的基本方法
out.write(int b);//写出一个byte到流,b的低8位
out.write(byte[] buf);//将buf字节数组都写到流
out.write(byte[] buf,int start,int size);
5) FileInputStream--> 具体实现了在文件上读取数据
FileOutputStream--> 具体实现了在文件上写出byte数据
6) DataInputStream
DataoutputStream
对流功能的扩展(装饰模式),可以更加方便地读取int、long、字符等类型数据
DataOutputStream writeInt()/writeDouble()/writeUTF()/writeChars()
--->DataOutputStream dos= new DataOutputStream(new FileOutputStream(file));
DataInputStream readInt()/readDouble()/readUTF()/readChars()
--->DataInputStream is= new DataInputStream(new FileInputStream(file));
7) BufferedInputStream/BufferedOutStream
这两个流类为IO提供了带缓冲区的操作,一般打开文件进行写入或者读取操作时,都会加入缓存,提高了IO性能。
从应用程序中把输入放入文件,相当于把一缸水倒入另外一个缸中;
FileOutputStream-->write() 相当于一滴一滴地把水转移过去
DataOutputStream-->writeXXX()方法会更加方便一些,相当于一瓢一瓢地把水转移过去
BufferedOutStream-->write() 相当于一瓢瓢倒入桶中,然后再由桶导入另外一个缸中,提高性能
二、字符流
1) 编码问题
2) 认识文本和文本文件
java的文本(Char)是16位无符号整数,是字符的unicode编码(双字节编码);
文件是byte byte byte...的数据序列
文本文件是文本(char)序列按照某种编码方案(gbk、utf-8...)序列化为byte的存储
3) 字符流(Reader Writer)--->操作文本文件
字符的处理,一个处理一个字符
字符的底层依然是基本的字节序列
字符流的基本实现
InputStreamReader 完成byte流解析为char流,按照编码解析
---> InputStreamReader isr= new InputStreamReader(new FileInputStream(file));
OutputStreamWriter 按照char流到byte流,按照编码处理
FileReader/FileWriter
BufferedReader/BufferedWriter
0 0
- Java专题之IO
- Java IO专题
- JAVA IO 专题
- Java小专题之IO
- IO 专题
- 【Java基础专题】IO与文件读写---Java的IO流架构
- Javo IO专题
- 专题3 标准IO编程
- Hadoop -【IO专题-序列化机制】
- io性能专题分析--持续跟新
- 【Java-IO】IO入门
- Java IO:IO框架
- 【IO】java IO 总结
- 专题:Java Servlets
- Java 代码质量专题
- IBM:Java 核心技术专题
- Java 核心技术专题
- Java EE 技术专题
- error:unknown filesystem grub rescue
- Android 进程生命周期 Process Lifecycle
- poj 2084/3982 java大数(Catalan数)
- 在viewpager中动态添加view,并实现伪无限循环
- 后缀自动机构造过程演示
- Java IO专题
- Factor Oracle自动机的构造
- 八大排序算法的 Python 实现
- 一名合格的测试员应具备的素质
- access denied for user 'root'@'localhost' (using password: YES)
- 差分约束系统
- Javap学习
- 0010用顺序表实现约瑟夫环(Josephus)问题
- windows核心编程之用户方式中的线程同步