java使用字节流和字符流实现文件复制
大家在Java开发中都会遇到文件复制的文件,众所周知,需要通过文件输入输出流实现。
那究竟该怎么做那,话不多说,直接上代码:
一,使用字节流复制文件
public class FileByteCopy {
public static void main(String[] args) {
FileByteCopy f= new FileByteCopy();
try {
f.copy("d:/File/1.txt","d:/CopyFile/1.txt");
} catch (Exception e) {
e.printStackTrace();
}
}
public void copy(String f1,String f2) throws Exception{
FileInputStream fis = new FileInputStream(f1); //首先构建输入流的对象,指定需要读取的文件路径
FileOutputStream fos = new FileOutputStream(f2,false); //构建文件输出流的对象,即将文件复制在哪里去,后面的true代表每次写入时不清空当前文件内容
//方法一,单字节复制
// int value = fis.read(); / //一个字节一个字节的读取文件的内容
// while(value!=-1){
// fos.write(value);
// fos.flush();
// value = fis.read();
// }
//方法二 以字节数组为单位传递 (一次传递一个大小自定义的数组)
byte [] bytes = new byte[1024];
int len=fis.read(bytes); //把读取的字节存入到字节数组中 此时的len为文件中的大小,注意不一定是1024。下图中的95字节即为对应的源文件的len值
while(len!=-1){
// fos.write(bytes); //使用这种方法,如果源文件大小不是1024,,复制后的文件也会是1024。因为一次读取的最小的都是1024,详细见下图。
复制前
复制后
fos.write(bytes, 0, len); //从偏移量0开始到len(95)写入字符,可以保证源文件和复制后的文件大小一致。
fos.flush();
len=fis.read(bytes);
}
//读取完毕后关闭流
fis.close();
fos.close();
}
}
二,使用字符流复制文件(与字节流同理)
public class FileCharCopy {
public static void main(String[] args) {
FileCharCopy f = new FileCharCopy();
try {
f.copy("d:/File/1.txt","d:/CopyFile/1.txt");
} catch (Exception e) {
e.printStackTrace();
}
}
public void copy(String f1,String f2) throws Exception{
FileReader fr = new FileReader(f1);
FileWriter fw =new FileWriter(f2,false);
//int value=fr.read();
//while(value!=-1){
//fw.write(value);
//fw.flush();
//value=fr.read();
//}
char [] chars = new char[1024];
int len =fr.read(chars);
while(len!=-1){
fw.write(chars, 0, len);
fw.flush();
len =fr.read(chars);
}
fr.close();
fw.close();
}
java使用字节流和字符流实现文件复制的更多相关文章
- Java中字节流和字符流复制文件
字节流和字符流复制文件的过程: 1.建立两个流对象 绑定数据源和目的地 2.遍历出需复制的文件写入复制过后的新文件中(只不过是遍历的时候是区分字节和字符的) 3.访问结束后关闭资源 字节流复制文件: ...
- java中字节流与字符流的区别
字节流 在I/O类库中,java.io.InputStream和java.io.OutputStream分别表示字节输入流和字节输出流,它们都是抽象类,不能实例化,数据流中的最小单位是字节,所以叫做字 ...
- JAVA IO 字节流与字符流
文章出自:听云博客 题主将以三个章节的篇幅来讲解JAVA IO的内容 . 第一节JAVA IO包的框架体系和源码分析,第二节,序列化反序列化和IO的设计模块,第三节异步IO. 本文是第一节. ...
- Java中字节流和字符流的比较(转)
字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢? 实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操 ...
- java 21 - 4 字符流的文件复制操作以及简化
既然字节流可以复制文件,那么字符流当然也有. 同样的思路: 数据源: a.txt -- 读取数据 -- 字符转换流 -- InputStreamReader目的地: b.txt -- 写出数据 -- ...
- java中字节流和字符流的区别
流分类: 1.Java的字节流 InputStream是所有字节输入流的祖先,而OutputStream是所有字节输出流的祖先.2.Java的字符流 Reader是所有读取字符串输入流的祖先,而 ...
- Java IO 字节流与字符流 (五)
Java的IO流分为字符流(Reader,Writer)和字节流(InputStream,OutputStream),字节流顾名思义字节流就是将文件的内容读取到字节数组,然后再输出到另一个文件中.而字 ...
- Java IO 字节流与字符流 (三)
概述 IO流用来处理设备之间的数据传输 Java对数据的操作时通过流的方式 Java用于操作流的对象都在IO包中 流按操作的数据分为:字节流和字符流 流按流向不同分为:输入流和输出流 IO流常用基类 ...
- Java IO 字节流与字符流 (二)
1. 什么是流 Java中的流是对字节序列的抽象,我们可以想象有一个水管,只不过现在流动在水管中的不再是水,而是字节序列.和水流一样,Java中的流也具有一个“流动的方向”,通常可以从中读入一个字节序 ...
随机推荐
- sping 框架学习之——初始篇
sping框架学习: 1,什么是spring框架 spring是J2EE应用程序框架,是轻量级的IoC和AOP的容器框架,主要是针对javaBean的生命周期进行管理的轻量级容器,可以单独使用,也可以 ...
- 10. leetcode 226 Invert Binary Tree
思路:递归.先将左子树反转,再将右子树反转,然后让root->left指向反转后的右子树,root->right指向反转后的左子树.
- ABP+AdminLTE+Bootstrap Table权限管理系统第四节--仓储,服务,服务接口及依赖注入
在ABP框架中,仓储,服务,这块算是最为重要一块之一了.ABP框架提供了创建和组装模块的基础,一个模块能够依赖于另一个模块,一个程序集可看成一个模块, 一个模块可以通过一个类来定义这个模块,而给定义这 ...
- Tomcat结构、启动过程、关键组件简单分析
Tomcat 结构: Tomcat最顶层容器叫Server,代表整个服务器,Server中包含至少一个Service,用于具体提供服务,Serv ...
- linux C语言处理正则表达式
Linux下C语言处理正则表达式——regex.h 具体函数介绍 编译正则表达式函数 int regcomp(regex_t *preg, const char *regex, int cflags) ...
- golang的闭包和普通函数调用区别
先看一段程序 package main import ( "fmt") func main() { a := []int{1, 2, 3} for _, i := range ...
- SVN 、Git、Github的使用
1.1 SVN 总结以及使用建议 每一次保存历史记录实际上就是一次提交 什么时候去保存历史记录? 完成了一个具体的功能模块 代码运行没有bug 当天工作结束提交一次 没有 bug 的前提下去提交一次 ...
- python_正则表达式
re.match函数 re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none. 函数语法: \[re.match(pattern, strin ...
- 关于JS脚本语言的基础语法
JS脚本语言的基础语法:输出语法 alert("警告!"); confirm("确定吗?"); prompt("请输入密码");为弱 ...
- tomcat websocket 实现网页在线即时聊天
背景介绍 近一个月完成了公司的一个项目,负责即时聊天部分 寻找了一下,决定使用websocket,要问原因的话,因为tomcat 自带相关消息收发的API,用起来方便 闲话少叙,进入实现步骤 使用工具 ...