学习IO流之字节流和字符流
来源:互联网 发布:linux定时执行脚本 编辑:程序博客网 时间:2024/06/05 22:40
字节流和字符流的操作方式几乎完全一样,区别之是操作的数据单元不同,字节流操作的数据单元是直接,字符流操作的数据单元是字符。
字节和字符输入流,在java类中,分别是InputStream 和Reader,这两个类都是抽象类,不能实例化,对于文件的读取,可以使用FileInputStream和FileReader子类来使用
import java.io.FileInputStream;import java.io.IOException;public class FileInputStreamTest {public static void main(String[] args) throws IOException {// 创建字节输入流FileInputStream fis = new FileInputStream("src/notes/io/FileInputStreamTest.java");// 创建一个长度为1024的byte类型的储存流的数组byte[] buff = new byte[1024];// 用来保存实际读取的字节数int len = 0;while ((len = fis.read(buff)) > 0) {// 取出储存在数组中的数据,将字节数转换成为字符串输出System.out.println(new String(buff, 0, len));}// 关闭流fis.close();}}在上面代码中,使用了一个长度为1024字节的数组来读取该文件,解决在读取文件中,如果遇到中文字符,每个中文字符占两个直接,只读单个字节会出现乱码的问题。上面程序最后使用了fis.close()来关闭该文件流,在jdk7中,改写了所有的IO资源类,他们都是先了AutoCloseable接口,所有都可以通过自动关闭资源的try语句来关闭这些IO流。虾米啊你程序使用FIleReader来读取文件本身。
import java.io.FileReader;import java.io.IOException;public class FileReaderTest {public static void main(String[] args) {// 创建字符输入流 放到try()里面 fr将自动关闭 jdk1.7开始支持try (FileReader fr = new FileReader("src/notes/io/FileReaderTest.java");) {char[] cbuf = new char[32];int len = 0;while ((len = fr.read(cbuf)) > 0) {System.out.println(new String(cbuf, 0, len));}} catch (IOException e) {e.printStackTrace();}}}
通常来说字节流的功能比字符流的功能强大,因为计算机所有的数据都是二进制的,但是遇到处理文本文件,就需要将字节转换成字符,增加了编程的复杂度,所以通常有一个规则:如果进行输入/输出的内容是文本内容,则应该考虑使用字符流,如果进行输入/输出的内容是二进制内容,则应该考虑使用字节流。
通过RandomAccessFile类,实现向指定文件、指定位置插入内容的功能
import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.RandomAccessFile;public class InserContent {/** * 向文件指定位置插入数据 * * @param fileName * 插入数据的文件 * @param pos * 文件中插入数据的起始位置 * @param insertContent * 插入的内容 * @throws IOException */public static void insert(String fileName, long pos, String insertContent) throws IOException {File tmp = File.createTempFile("tmp", null);tmp.deleteOnExit();// 当JVM退出时删除当前文件// 流的创建放到try(),推出时候自动关闭 jdk1.7开始try (RandomAccessFile raf = new RandomAccessFile(fileName, "rw");FileOutputStream tmpOut = new FileOutputStream(tmp);FileInputStream tmpIn = new FileInputStream(tmp);) {raf.seek(pos);// 设置指针位置// -----------下面将插入点后面的代码复制到输出到临时文件中---------------byte[] bbuf = new byte[64];int len = 0;while ((len = raf.read(bbuf)) > 0) {tmpOut.write(bbuf, 0, len);}// ------------下面代码用于插入内容-----------// 将指针重新定位到pos位置raf.seek(pos);// 追加插入的内容raf.write(insertContent.getBytes());// 将临时文件中的内容追加到文件末尾while ((len = tmpIn.read(bbuf)) > 0) {raf.write(bbuf, 0, len);}}}public static void main(String[] args) throws IOException {insert("src/notes/io/InserContent2.java", 0, "\\\\插入追加的内容\t\n");}}
0 0
- 学习IO流之字节流和字符流
- Java IO学习笔记之字节流和字符流
- IO流之字节流和字符流的区别
- Java基础:IO流之字节流和字符流
- java 基础之 IO(字节流和字符流)
- IO之字节流和字符流的区别
- java基础--IO流之字节、字符和转换流
- Java IO操作之字节流和字符流
- IO流之字节数组流和字符串流
- IO操作之字节流和字符流
- java IO之字节流和字符流比较
- JAVA之IO 基础(字节流和字符流)
- 【Java之IO】1.字节流和字符流
- 黑马程序员--Java学习日记之IO流(字符流和字节流)
- IO流学习之小谈字节流和字符流
- java学习之路----IO-------字节流和字符流的区别,文件的复制
- IO流字节流字符流学习
- IO之字节字符转换流
- 深入理解CUDA线程层次以及关于设置线程数的思考
- DVD管理!!
- 双链表应用之约瑟夫环问题
- 学习IO流之File类和Files类的使用
- 第四周name
- 学习IO流之字节流和字符流
- 微服务产品级敏捷: 微服务架构设计
- PHP $_SERVER['PHP_SELF']、$_SERVER['SCRIPT_NAME'] 与 $_SERVER['REQUEST_URI'] 之间的区别
- 【JZOJ4799】【NOIP2016提高A组模拟9.24】我的快乐时代
- 1加到n
- 回忆java来时路-第七章 类的初始化
- 【Dongle】【Web】JQuery总结
- android Spinner控件详解【转】
- MongoDB:The Definitive Guide 2nd笔记之system.profile