RE:JAVA学习-基本IO操作及文本数据IO操作
来源:互联网 发布:java中的命名规范 编辑:程序博客网 时间:2024/06/16 09:34
1.输入输出(传输方向)
输入:从外界进入到程序的方向,”读取”外界的数据时,使用输入(输入是用来读取数据的)
输出:从程序发送到外界的方向,”写出”数据到外界时,使用输出(输出是用来写出数据的)
按照流是否直接与特定的地方分为(传输形式:):
节点流(低级流):可以从或向一个特定的地方(节点)读写数据
处理流(高级流):是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写
输入流 输出流
字符流 Reader Writer
字节流 InputStream OutputStream
这四个基本流都是抽象类
2.文件流
2.1 FileOutputStream
是文件的字节输出流,以字节为单位将数据写入文件
构造方法:
FileOutputStream(File file) 创建一个向指定File对象表示的文件中写出数据的文件输出流
FileOutputStream(String filename) 创建一个向具有指定名称的文件中写出数据的文件输出流
(若指定问文件已经有内容,则使用FOS写入的时候会清空原数据)
FileOutputStream(file,true)
FileOutputStream(filename,true)
用以上构造方法则不会覆盖原文件,而是在原文件后追加写入
写入方法:
void write(byte[]b) 将 b.length 个字节从指定 byte 数组写入此文件输出流中
void write(byte[] b, int off, int len) 将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此文件输出流
void write(int b) 将指定字节写入此文件输出流
2.2 FileInputStream是文件的字节输入流,以字节为单位从文件中读取数据
构造方法:
FileInputStream(File file)
FileInputStream(String name)
读取方法:
int read() 从此输入流中读取一个数据字节
int read(byte[] b) 从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中
int read(byte[] b, int off, int len) 从此输入流中将最多 len 个字节的数据读入一个 byte 数组中
代码演示:实现文件的复制
/** * 使用文件流复制文件 * */public class CopyDemo { public static void main(String[] args) throws IOException { /* * 使用文件输入流将原文件中的所有字节顺序的 * 读取出来再用文件输出流写入到另一个文件中 * 完成复制操作 */ FileInputStream fis = new FileInputStream("music.mp3"); FileOutputStream fos = new FileOutputStream("music_cp2.mp3"); byte[] buf = new byte[1024*10]; int len = -1; while( (len = fis.read(buf)) !=-1 ){ fos.write(buf,0,len); } System.out.println("复制完毕"); fis.close(); fos.close(); }}
附:使用缓冲流实现文件的复制
/** * 缓冲流: BufferedInputStream:缓冲输入流,提高读取效率 BufferedOutputStream:缓冲输出流,提高写出效率 * * @author adminitartor * */public class CopyDemo2 { public static void main(String[] args) throws IOException { FileInputStream fis = new FileInputStream("test.zip"); BufferedInputStream bis = new BufferedInputStream(fis); FileOutputStream fos = new FileOutputStream("test_cp.zip"); BufferedOutputStream bos = new BufferedOutputStream(fos); int d = -1; long start = System.currentTimeMillis(); /* * 缓冲流内部维护着一个缓冲区(字节数组) * bis.read()看似读取一个字节,实际上缓冲流 * 会一次性通过fis读取一组字节,并存入内部维护 * 的字节数组中,然后将第一个字节返回。这样当 * 再次调用bis.read()读取一个字节时,会直接从 * 内部的字节数组将第二个字节返回。 * 所以缓冲流还是通过提高一次实际读取的字节量 * 减少实际读取次数提高的效率。 * 缓冲输出流也是类似原理。 */ while ((d = bis.read()) != -1) { bos.write(d); } long end = System.currentTimeMillis(); System.out.println("复制完毕,耗时:"+(end-start)+"ms"); /* * 关闭流只需要关闭最外层高级流即可。 */ bis.close(); bos.close(); }}
3.转换流
转换输出流:OutputStreamWriter 表面上展现的是字符流,实际上是以字节流形式传输的(字符转字节)
转换输入流:InputStreamReader 实际上是以字节形式读取的数据,但是以字符形式展现的(字节转字符)
- RE:JAVA学习-基本IO操作及文本数据IO操作
- 基本IO操作 、 文本数据IO操作
- Java_SE07-基本IO操作,文本数据IO操作
- SE02 Unit02 基本IO操作 、 文本数据IO操作
- java基本IO操作
- java IO操作学习
- 89、java的IO操作-基本数据操作流
- java笔记-IO流-IO基本操作
- java 基本的io操作
- Java IO 一些基本操作
- Java 基本的IO操作
- 025 Java 基本IO操作
- Java基础--IO基本操作
- Java IO流基本操作
- Java_SE08-文本数据IO操作,异常处理
- 文本数据IO操作 、 异常处理
- 87、java的IO操作-复制文本
- Java学习笔记---IO操作
- Conscription
- % is not in the sudoers file 问题解决:非root用户使用sudo报错
- c++的粗略学习2(继承,多态)
- 面试心得 --- 滴滴三面
- 计算机网络笔记(一)
- RE:JAVA学习-基本IO操作及文本数据IO操作
- maven之clean、install命令
- 第三章:3.7 傅里叶变换性质(一)
- 微型四轴飞行器(2)硬件设计
- 高吞吐高并发Java NIO服务的架构
- 自学nginx(三): nginx + gunicorn的反向代理
- UVA
- 并查集
- Android6.0哪些权限要动态申请?