java基础io_Java基础——iO(一)

此文为了解IO知识的基础篇,这块我看了几天,感觉和前段时间学习集合一样,零散又重要。想记录一下这块由浅入深的学习过程。所以,接下来会记录几篇学习笔记,之后会有以前深入总结。因为这块比较重要啊,所以一定要学好。

一、IO的概述

IO: (Input Output)

--- 什么是流:

一组有顺序的、有起点和终点的数据集合,如文件流、网络流

--- 流与文件的区别:

文件是数据的静态存储方法。流是数据在传输时的一种形态。

java 对数据的操作都是通过流的方式,java 用于操作流的对象都在IO包中。

流按操作数据分为:

字节流(InputStream、OutputStream) 和 字符流(Reader、Writer)

其他所有的IO操作的类都是有它 们派生出来的

凡是属于字节流的 都是以 InputStream ,  OutputStream 为结尾,比如  FileInputStream, FileOutputStream 等

凡是属于字符流的,都是以   Reader  , Writer 为结尾 比如  FileReader, PrintWriter 等

流按流向分为:

输入流和输出流

cc53eba5d803e91fe21662f1a4104a39.png

二、字符流 Writer

字符流的结构(只以输出流为例)

Writer -- BufferedWriter

CharArrayWriter

OutputStreamWriter --FileWriter

FilterWriter  //过滤流

PipedWriter   //管道流

StringWriter

//例一 创建一个文件,写入一些内容

static void test() throws IOException{

Writer wr=new FileWriter("c:/1.txt"); //把原来的内容覆盖了

wr.write("这是一行文本");

wr.write("\r\n"); //写入换行符

wr.write("这是第二行文本"); //写到缓冲区中了

wr.flush(); //刷新缓冲区

wr.close(); //流使用完,一定要关闭

}

//FileWriter(String fileName, boolean append)

static void test2()throws IOException{

Writer wr=new FileWriter("c:/1.txt",true); //可以给第二个参数传true,表示以追回的方式写入

wr.write("这是追加方式写入的内容");

//wr.flush(); 有下面的close,这里不flush也可以

wr.close();

}

三、标准的IO异常处理

代码示例:

import java.io.FileWriter;

import java.io.IOException;

import java.io.Writer;

import java.util.ArrayList;

import java.util.List;

//把一份名单写入文件

class Test16 {

public static void main(String[] args) {

List nameList = new ArrayList();

nameList.add("PHP");

nameList.add("Java");

nameList.add("C#");

nameList.add("C++");

Writer wr = null;

try {

wr = new FileWriter("名单.exe");

for (String name : nameList) {

wr.write(name + "\r\n");

}

} catch (Exception ex) {

throw new RuntimeException(ex);

} finally {

try {

if (wr != null) {

wr.close();

}

} catch (IOException ex) {

throw new RuntimeException(ex);

}

}

}

}

// 关键点,要在finally 中关闭资源,关闭的时候,不要忘了判断这个资源是不是null

四、字符流 Reader

//例子,从文件中读取数据

int read() 读取单个字符 //返回的是这个字符的编码值

int read(char[] cbuf) 将字符读入数组 //返回值是读到的字符个数,如果读到了末尾,返回-1(-1这个性质经常用到)

int read(char[] cbuf, int off, int len)  将字符读入数组的某一部分。

//从文件读取数据 (本例是一个字符一个字符的方式读的)

static void test4() throws IOException {

Reader r=new FileReader("C:/名单.txt");

int ch=0;

while(( ch=r.read()) !=-1 ){

System.out.println((char)ch);

}

}

//从文件读取数据 ,做为了一个符串打印出来

static void test5() throws IOException {

Reader r=new FileReader("C:/1.txt");

char [] buff=new char[1024];

int count=r.read(buff);

String str=new String(buff,0,count);

System.out.println(str);

r.close();

}

//例子 文件复制 ,把C盘上的某个文件复制到E盘

//这样的复制是将字符一个一个的复制,很显然,它的效率比较低!

Reader r=new FileReader("E:\\FristOne\\src\\MyProject.java");

//注意:路径的反斜杠要用转义

Writer w=new FileWriter("E:\\desc.txt");

int ch=0;

while( (ch= r.read())!=-1 ){

w.write(ch);

}

r.close();

w.close()

既然,有一个一个的复制,我们会想,怎么样才能让复制的效率变得更加高效呢?

我们可以定义一个容器,用它去块一块的去复制,效率就会更高了。下面是图形说明:

f1c573f392ba4dc97eaf78f629a03325.png

代码示例:

Reader r=new FileReader("E:\\FristOne\\src\\MyProject.java");

Writer w=new FileWriter("E:\\desc.txt");

char [] buff=new char[1024];//定义一个容器

//定义容器之后,会发生一些情况,比如取了几次以后,剩下部分的容量少于定义的容器的容量,这时候让它再去一次势必会有空余的空间被占位。这不是我们想要的,所以就引出下面这个含参的取法。

int len=0;

while( (len= r.read(buff))!=-1 ){

w.write(buff,0,len);

}

r.close();

w.close();

关于IO的知识确实蛮多的,下篇待续咯......

Java基础IO流(二)字节流小案例

JAVA基础IO流(一)https://www.cnblogs.com/deepSleeping/p/9693601.html ①读取指定文件内容,按照16进制输出到控制台 其中,Integer.to ...

Java基础-IO流对象之压缩流(ZipOutputStream)与解压缩流(ZipInputStream)

Java基础-IO流对象之压缩流(ZipOutputStream)与解压缩流(ZipInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 之前我已经分享过很多的J ...

Java基础-IO流对象之随机访问文件(RandomAccessFile)

Java基础-IO流对象之随机访问文件(RandomAccessFile) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.RandomAccessFile简介 此类的实例支持对 ...

Java基础-IO流对象之内存操作流(ByteArrayOutputStream与ByteArrayInputStream)

Java基础-IO流对象之内存操作流(ByteArrayOutputStream与ByteArrayInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.内存 ...

Java基础-IO流对象之数据流(DataOutputStream与DataInputStream)

Java基础-IO流对象之数据流(DataOutputStream与DataInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数据流特点 操作基本数据类型 ...

Java基础-IO流对象之打印流(PrintStream与PrintWriter)

Java基础-IO流对象之打印流(PrintStream与PrintWriter) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.打印流的特性 打印对象有两个,即字节打印流(P ...

Java基础-IO流对象之序列化(ObjectOutputStream)与反序列化(ObjectInputStream)

Java基础-IO流对象之序列化(ObjectOutputStream)与反序列化(ObjectInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.对象的序 ...

java基础-IO流对象之Properties集合

java基础-IO流对象之Properties集合 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Properties集合的特点 Properties类表示了一个持久的属性集. ...

Java基础-IO流对象之字符缓冲流(BufferedWriter与BufferedReader)

Java基础-IO流对象之字符缓冲流(BufferedWriter与BufferedReader) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.字符缓冲流 字符缓冲流根据流的 ...

Java基础-IO流对象之字节缓冲流(BufferedOutputStream与BufferedInputStream)

Java基础-IO流对象之字节缓冲流(BufferedOutputStream与BufferedInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在我们学习字 ...

随机推荐

detailsview 样式小问题

detailsview不显示表头,设置HeaderText=""就可以,不知道为什么,如果有值,其他方式都没有调好! 内网格显示为0,Gridlines="None&qu ...

JAVA中线程池启动定时任务

/** * 用线程池启动定时器 * @param args */ public static void main(String[] args) { //10秒启动 Executors.newSched ...

php文件格式数组

一个文件格式对应的数组$mime_types = array('gif' => 'image/gif','jpg' => 'image/jpeg','jpeg' => 'image/ ...

PHP数组基本排序算法和查找算法

关于PHP中的基础算法,小结一下,也算是本博客的第一篇文章1.2种排序算法冒泡排序:例子:个人见解 5 6 2 3 7 9 第一趟 5 6 2 3 7 9 5 2 6 3 7 9 5 2 3 6 7 ...

jdk源码阅读笔记-HashMap

文章出处:[noblogs-it技术博客网站]的博客:jdk1.8源码分析 在Java语言中使用的最多的数据结构大概右两种,第一种是数组,比如Array,ArrayList,第二种链表,比如Array ...

洗礼灵魂,修炼python(11)--python函数,模块

前面的章节你如果看懂了,基本算是入门了七八了,不过如果你以为python就这么点东西,你觉得很简单啊,那你就错了,真正的东西在后面,前面我说的几大核心其实也不是多么高深多么厉害的,那些东西是基础很常用 ...

C#4.0特性

C# 4.0的主要主题是动态编程.对象的意义变得越来越“动态”,它们的结构和行为无法通过静态类型来捕获,或者至少编译器在编译程序时无法得知对象的结构和行为. a. 来自动态编程语言——如Python或 ...

iOS 创建一个App目录结构

Class:存放的是App中所有的模块功能 Base:存放一些基类,比如BaseViewController,BaseModel等,共性直接在基类中去修改 Vendor:三方,因为我的项目中使用coc ...

工作T-SQL备忘

作为一个"浸淫" Oracle 数据库很久的人来说, 突然转入 T-SQL, 也就是 MSSQL , 工作中经常用的查询和 MSMS 使用备忘如下 : --1. 切换对应的库连接 ...

select 操作选中添加、删除操作Javascript

//添加选中项 function addItem() { var myMember = document.getElementById("myMember"); var other ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为你介绍一下如何使用 Java 编写程序实现文件拷贝。 Java 提供了非常方便的 I/O 类来处理文件读写操作。文件拷贝的基本思路是读取源文件中的数据,然后将数据写入到目标文件中。下面是一个简单的文件拷贝程序示例: ```java import java.io.*; public class FileCopy { public static void main(String[] args) throws IOException { // 源文件路径 String srcFilePath = "C:/temp/source.txt"; // 目标文件路径 String destFilePath = "C:/temp/dest.txt"; // 创建输入流和输出流 FileInputStream fis = new FileInputStream(srcFilePath); FileOutputStream fos = new FileOutputStream(destFilePath); // 定义缓冲区,每次读取 1024 个字节 byte[] buffer = new byte[1024]; int len; // 循环读取源文件中的数据,并将数据写入到目标文件中 while ((len = fis.read(buffer)) != -1) { fos.write(buffer, 0, len); } // 关闭输入流和输出流 fis.close(); fos.close(); System.out.println("文件拷贝完成!"); } } ``` 在上面的示例中,我们首先定义了源文件路径和目标文件路径。然后创建了输入流和输出流,用于读取源文件和向目标文件写入数据。我们定义了一个缓冲区,每次从输入流中读取 1024 个字节,并将这些字节写入到输出流中。最后,我们关闭输入流和输出流,并输出一条完成信息。 需要注意的是,上面的代码中使用了 try-catch 语句来捕获可能出现的 IOException 异常。这是因为在文件读写过程中可能会出现异常,比如文件不存在、文件无法读取等等。为了保证程序的健壮性,我们需要使用 try-catch 语句来处理这些异常。 希望这个简单的示例可以帮助你了解如何使用 Java 编写文件拷贝程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值