Java的输入流主要由:InputStream和Reader作为基类,把持久化数据读入内存。输出流由OutputStream和Write类作为父类。

其中读如内存的时候,不可能一下去全读进去,需要一个缓存区,一块一块的读。如果要再把数据复制到其他磁盘,也可以在循环读的时候把数据再写入目标地址。

Reader抽象类:下有InputStreamReader和BufferedReader(读取字符流文件,自带缓存区,有ReaderLine方法可每次读一行。需要和FileReader类一起使用);

InputStreamReader下有FileReader类(读取字符流数据)

InputStream抽象类有子类:FileInputStream类(读取字节流数据);FileInputStream类有子类:DataInputStream(用来读取二进制数据)类。

Writer抽象类:下有OutputStreamWriter和【BufferedWriter子类(需要和FileWriter类仪器连用)】;(和Reader类的子类相对应,写入的时候需要标识偏移量从哪开始读,读到哪里。OutputStream读到-1停止,BufferedWriter读到null停止)。

OutputStreamWriter类:下有FileWriter类。

OutputStream抽象类下有子类:FileOutputStream类(用来写入字节流数据);FileOutputStream类下有子类:DataOutputStream类(用来写入二进制数据);

几个案列加深记忆:

1:File的常用方法

File file=new File("D:\\我的青春谁做主.txt");
if(!file.exists()){
try {
file.createNewFile();
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
if(file.isFile()){
System.out.println("名称:"+file.getName());
System.out.println("绝对路径:"+file.getAbsolutePath());
System.out.println("文件大小:"+file.length());
}
if( file.delete()){
System.out.println("删除文件成功!");
}

2:用读取字节流的方法读取文件并把读到数据写入别的磁盘下

FileInputStream fis=null;//
FileOutputStream fos=null;
try {
fis=new FileInputStream("D:\\我的青春谁做主.txt");
fos=new FileOutputStream("E:\\lianxi.txt");
byte[] bytes=new byte[1024];
StringBuffer sb=new StringBuffer();
int size=0;
while((size=fis.read(bytes))!=-1){
String str=new String(bytes);
sb.append(str);
fos.write(bytes, 0, size);
}
System.out.println(sb);
} catch (Exception e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}finally{
try {
fis.close();
fos.close();
} catch (Exception e2) {
// TODO: handle exception
}
}

3:用读取字符流的方法读取文件并把读到数据写入别的磁盘下

BufferedReader br=null;
BufferedWriter bw=null;
try {

FileReader fr=new FileReader("D:\\pet.template.txt");
FileWriter fw=new FileWriter("E:\\pet.txt");
br=new BufferedReader(fr);
bw=new BufferedWriter(fw);
String line=null;
StringBuffer sb=new StringBuffer();
while((line=br.readLine())!=null){
sb.append(line);
}
System.out.println("替换前:"+sb);
String newStr=sb.toString().replace("{name}", "欧欧");
newStr=newStr.replace("{type}", "狗狗");
newStr=newStr.replace("{master}", "李伟");
fw.write(newStr);
} catch (Exception e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}finally{
try {
if(br!=null){
br.close();
}
if(bw!=null){
bw.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}

4:使用DataInputStream类和DataOutputStream类读取写入二进制文件(如:图片)

Scanner input=new Scanner(System.in);
System.out.println("请输入要复制的文件绝对路径:");
String filepath=input.nextLine();
System.out.println("请输入复制后的磁盘路径:");
String targetpath=input.nextLine();
DataInputStream dis=null;
DataOutputStream dos=null;
try {
FileInputStream fis=new FileInputStream(filepath);
dis=new DataInputStream(fis);
FileOutputStream fos=new FileOutputStream(targetpath);
dos=new DataOutputStream(fos);
byte[] bytes=new byte[1024];
StringBuffer sb=new StringBuffer();
int size=0;
while((size=dis.read(bytes))!=-1){
String str=new String(bytes);
sb.append(str);
dos.write(bytes);
}
System.out.println("复制成功!");
} catch (Exception e) {
// TODO: handle exception
}finally{
try {
if(dis!=null){
dis.close();
}
if(dos!=null){
dos.close();
}
} catch (Exception e2) {
// TODO: handle exception
}
}

Java里的File I/O的更多相关文章

  1. 模块(相当于Java里的包)

    Python提供丰富和强大的标准库和第三方库. sys库 在命令窗口中可以输入参数 若想将参数打印出来, 可以这样写: print(sys.argv[2]) os库 可以创建文件夹. 类似于Java里 ...

  2. 黑马程序员——JAVA基础之File类,递归,打印流,合并切割流

    ------- android培训.java培训.期待与您交流! ---------- File类 用来将文件或者文件夹封装成对象 方便对文件与文件夹的属性信息进行操作. File对象可以作为参数传递 ...

  3. Java 里的异常(Exception)详解

    作为一位初学者, 本屌也没有能力对异常谈得很深入.   只不过Java里关于Exception的东西实在是很多. 所以这篇文章很长就是了.. 一, 什么是java里的异常   由于java是c\c++ ...

  4. 关于spark入门报错 java.io.FileNotFoundException: File file:/home/dummy/spark_log/file1.txt does not exist

    不想看废话的可以直接拉到最底看总结 废话开始: master: master主机存在文件,却报 执行spark-shell语句:  ./spark-shell  --master spark://ma ...

  5. Sqoop 抽数报错: java.io.FileNotFoundException: File does not exist

    Sqoop 抽数报错: java.io.FileNotFoundException: File does not exist 一.错误详情 2019-10-17 20:04:49,080 INFO [ ...

  6. 小谈Java里的线程

    今天,我们来谈一谈Java里的线程. 一.进程与线程的基本概念 大家可能没听过线程这个概念,但是相信,用计算机的朋友都听过进程这个概念.打开电脑的任务管理器,我们就可以看到许多进程.它们主要分为三类, ...

  7. JMeter学习-027-JMeter参数文件(脚本分发)路径问题:jmeter.threads.JMeterThread: Test failed! java.lang.IllegalArgumentException: File distributed.csv must exist and be readable解决方法

    前些天,在进行分布式参数化测试的时候,出现了如题所示的错误报错信息.此文,针对此做一个简略的重现及分析说明. JMX脚本线程组参数配置如下所示: 参数文件路径配置如下所示: 执行JMX脚本后,服务器对 ...

  8. [Storm] java.io.FileNotFoundException: File '../stormconf.ser' does not exist

    This bug will kill supervisors Affects Version/s: 0.9.2-incubating, 0.9.3, 0.9.4 Fix Version/s: 0.10 ...

  9. java里的static和final

    本节介绍JAVA里static和final的作用和使用方法以及一些需要注意的问题. 一.static static表示"全局"或"静态",用来修饰成员变量和成员 ...

随机推荐

  1. jeecg的cq查询方式

    @RequestMapping(params = "datagrid")    public void datagrid(TbStudentDepEntity tbStudentD ...

  2. NSUserdefaults 简介以及存储自定义数据类型的方法

    一.了解NSUserDefaults以及它可以直接存储的类型 NSUserDefaults是一个单例,在整个程序中只有一个实例对象,他可以用于数据的永久保存,而且简单实用,这是它可以让数据自由传递的一 ...

  3. docker gitlab,redmine,etc development enviroments

    sameersbn-gitlab is better more than officals sameersbn/redmine https://hub.docker.com/r/sameersbn/r ...

  4. 转:VS2010调试NUnit测试项目 (Running or debugging NUnit tests from Visual Studio without any extensions)

    If you write unit tests and use NUnit test framework this may be helpful. I decided to write this si ...

  5. Cocos2d-JS引入资源

    以图片为例: 创建项目后,把图片放入res文件夹,修改 app.js var HelloWorldLayer = cc.Layer.extend({ sprite:null, ctor:functio ...

  6. C/C++程序编译流程(预处理->编译->汇编->链接)

    程序的基本流程如图: 1. 预处理 预处理相当于根据预处理指令组装新的C/C++程序.经过预处理,会产生一个没有宏定义,没有条件编译指令,没有特殊符号的输出文件,这个文件的含义同原本的文件无异,只是内 ...

  7. Magento多语言功能

    Magento多语言功能是建立在视图(view)基础之上的,可以通过后台创建店铺视图来创建基于Magento的多语言店铺.本文为大家讲解如何创建多语言的功能.首先,进入“管理店铺”节点,如下所示. S ...

  8. CS6破解

    1) 序列号这里为大家生成了两个,可以通过软件验证:1325-0949-2080-9819-3777-32301325-0160-5283-9851-2671-8951 2) 破解补丁安装时会用到,请 ...

  9. Fiddler-001-抓包工具初识

    Fiddler 是一个非常简单的网络调试器,也是目前最常用的http抓包工具之一 .通过 Fiddler,我们能够能够记录客户端和服务器之间的所有 HTTP请求,即记录并检查所有你的电脑和互联网之间的 ...

  10. TCP/IP和HTTP的举例理解

    闲暇中逛博客园,看到TCP/IP和HTTP关键词,就突然想深刻理解他们(以前真的是只知皮毛),于是看了关于TCP/IP和HTTP的博文,就有了此文. 首先要引出开放系统互连参考模型(OSI:Open ...