目录:

一、java io 概述

什么是IO?

IO包括输入流和输出流,输入流指的是将数据以字符或者字节形式读取到内存 分为字符输入流和字符输入流

输入流指的是从内存读取到外界 ,分为字符输入流和字节输出流

Java IO即Java 输入输出系统。不管我们编写何种应用,都难免和各种输入输出相关的媒介打交道,其实和媒介进行IO的过程是十分复杂的,这要考虑的因素特别多,比如我们要考虑和哪种媒介进行IO(文件、控制台、网络),我们还要考虑具体和它们的通信方式(顺序、随机、二进制、按字符、按字、按行等等)。Java类库的设计者通过设计大量的类来攻克这些难题,这些类就位于java.io包中。

什么是流?

在Java IO中,流是一个核心的概念。流从概念上来说是一个连续的数据流。你既可以从流中读取数据,也可以往流中写数据。流与数据源或者数据流向的媒介相关联。在Java IO中流既可以是字节流(以字节为单位进行读写),也可以是字符流(以字符为单位进行读写)

二、Java IO类库的框架

2.1 Java IO的类型

虽然java IO类库庞大,但总体来说其框架还是很清楚的。从是读媒介还是写媒介的维度看,Java IO可以分为:

1. 输入流:InputStream和Reader

2. 输出流:OutputStream和Writer

而从其处理流的类型的维度上看,Java IO又可以分为:

1. 字节流:InputStream和OutputStream

2. 字符流:Reader和Writer

01:File

创建文件   删除文件 修改文件 删除文件信息

02:字节流InputStream            OutputStream基类(父类)

03:字符流Reader                Writer

04:缓冲流BufferReader           BufferWriter依赖于Reader  Writer

05:二进制流DataInputStream        DataOutputStream依赖于InputStream OutputStream

06:序例化objectInputStream      ObjectOutputStream依赖于InputStream OutputStream

我们的程序需要通过InputStream或Reader从数据源读取数据,然后用OutputStream或者Writer将数据写入到目标媒介中。其中,InputStream和Reader与数据源相关联,OutputStream和writer与目标媒介相关联。 以下的图说明了这一点:

三、Java IO的基本用法

3.1 Java IO :字节流(字节流对应的类应该是InputStream和OutputStream)

例1,用字节流写文件

packagecom.dzq;import java.io.*;/*** 字节流 InputStream OutputStream*/

public classByteDemo {public static voidmain(String[] args) {//创建输入流和输出流对象

InputStream inputStream=null;

OutputStream outputStream=null;try{

inputStream=new FileInputStream("e:/aaa.txt");//true代表是否向文件拼接,不能删除之前的内容

outputStream=new FileOutputStream("e:/aaa.txt",true);//向文件写入内容

outputStream.write("54321".getBytes());//read方法0-255,如果流读到了最后,将返回-1

int num=0;//int -1 字符串 null

while ((num=inputStream.read())!=-1){

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

}

}catch(Exception e) {

e.printStackTrace();

}try{

inputStream.close();

outputStream.close();

}catch(IOException e) {

e.printStackTrace();

}

}

}

3.2 Java IO :字符流(字符流对应的类应该是Reader和Writer)

例3,用字符流写文件

packagecom.dzq;import java.io.*;/** 字符流 Reader Writer*/

public classCharDemo{public static voidmain(String[] args) {//创建字符流输出和输入

Reader reader=null;

Writer writer=null;try{

reader=new FileReader("e:/aaa.txt");

writer=new FileWriter("e:/aaa.txt",true);

writer.write("我爱我家!");

writer.write("我爱我家?");

writer.write("我爱我家!!");

writer.write("我爱我家??");

writer.flush();

writer.write("我爱我家!!!!");

writer.close();//读取//创建一次性读取多个字符

char[] bytes =new char[1024];int num=0;

StringBuffer stringBuffer=newStringBuffer();while((num=reader.read(bytes))!=-1){

stringBuffer.append(bytes);

}

System.out.println(bytes);

}catch(Exception e) {

e.printStackTrace();

}finally{try{

writer.close();

reader.close();

}catch(IOException e) {

e.printStackTrace();

}

}

}

}

3.3 Java IO  :二进制流(DataInputStream DataOutputStream依赖于InputStream和OutputStream)

packagecom.dzq;import java.io.*;/**二进制流 DataInputStream DataOutputStream*/

public classDataDemo {public static voidmain(String[] args) {//创建输入流和输出流对象

InputStream inputStream=null;

OutputStream outputStream=null;

DataInputStream dataInputStream=null;

DataOutputStream dataOutputStream=null;try{//获取输入流

inputStream=new FileInputStream("e:/aaa.txt");

dataInputStream=new DataInputStream(inputStream);//封装//获取输出流

outputStream=new FileOutputStream("e:/aaa.txt");

dataOutputStream=newDataOutputStream(outputStream);//读取

int num=0;while ((num=dataInputStream.read())!=-1){

dataOutputStream.write(num);//复制

}

}catch(Exception e) {

e.printStackTrace();

}finally{try{

dataOutputStream.close();

dataInputStream.close();

outputStream.close();

inputStream.close();

}catch(IOException e) {

e.printStackTrace();

}

}

}

}

3.4 Java IO(缓冲流BufferReader  BufferWriter依赖于Reader 和Writer)

packagecom.dzq;import java.io.*;/***缓冲流 BufferReader BufferWriter*/

public classBufferDemo {public static voidmain(String[] args) {//创建字符流输出和输入

Reader reader = null;

Writer writer= null;

BufferedReader bufferReader=null;

BufferedWriter bufferedWriter=null;try{//写入

writer=new FileWriter("e:/aaa.txt") ;

bufferedWriter=new BufferedWriter(writer);//封装

bufferedWriter.write("我爱我家1");

bufferedWriter.write("我爱我家2");

bufferedWriter.write("我爱我家3");

bufferedWriter.newLine();//换行

bufferedWriter.write("我爱我家4");

reader.close();

bufferedWriter.close();//如果不关闭后两行出不来//读取

reader=new FileReader("e:/aaa.txt") ;

bufferReader=new BufferedReader(reader);//封装//拼接

String line=null;

StringBuffer stringBuffer=newStringBuffer();while((line=bufferReader.readLine())!=null){

stringBuffer.append(line);

}

System.out.println(stringBuffer.toString());

}catch(Exception e) {

e.printStackTrace();

}finally{try{

bufferReader.close();

reader.close();

}catch(IOException e) {

e.printStackTrace();

}

}

}

}

3.5 Java IO序列化和非序列化

User类:

packagecom.cd;importjava.io.Serializable;public class User implementsSerializable{publicString username;publicString password;publicString getUsername() {returnusername;

}public voidsetUsername(String username) {this.username =username;

}publicString getPassword() {returnpassword;

}public voidsetPassword(String password) {this.password =password;

}publicUser(String username, String password) {this.username =username;this.password =password;

}publicUser(){

}

}

各方法:

packagecom.cd;/*** 序列化和非序列化*/

import java.io.*;importjava.util.Scanner;public classObjectDemo {static Scanner input=newScanner(System.in);//创建输出流和输入流

static InputStream inputStream=null;static OutputStream outputStream=null;static ObjectInputStream objectInputStream=null;static ObjectOutputStream objectOutputStream=null;public static voidmain(String[] args) {//登录

Login();//注册

register();

}//注册

private static voidregister() {

User user=newUser();

System.out.println("请输入你的用户名");

user.setUsername(input.next());

System.out.println("请输入你的密码");

user.setPassword(input.next());try{

outputStream=new FileOutputStream("e:/aaa.txt");

objectOutputStream=newObjectOutputStream(outputStream);//把对象输出到文件中

objectOutputStream.writeObject(user);

}catch(Exception e) {

e.printStackTrace();

}finally{try{

objectOutputStream.close();

outputStream.close();

}catch(IOException e) {

e.printStackTrace();

}

}

}//登录

private static voidLogin() {try{

inputStream=new FileInputStream("e:/user.txt");

objectInputStream=newObjectInputStream(inputStream);//读取对象

User user=(User) objectInputStream.readObject();

System.out.println(user);

}catch(Exception e) {

e.printStackTrace();

}finally{try{

objectInputStream.close();

inputStream.close();

}catch(IOException e) {

e.printStackTrace();

}

}

}

}

3.6Java IO :字节流转换为字符流(InputStreamReader)

public static void convertByteToChar() throwsIOException{

File file= new File( "d:/test.txt");//获得一个字节流 InputStream is= new FileInputStream( file);//把字节流转换为字符流,其实就是把字符流和字节流组合的结果。

Reader reader= newInputStreamReader( is);char [] byteArray= new char[( int) file.length()];int size=reader.read( byteArray);

System. out.println("大小:"+size +";内容:" +newString(byteArray));

is.close();

reader.close();

}

3.7 File 操作文件

DEMO:

public classFileDemo

{static Scanner input =newScanner(System.in);public static voidmain( String[] args )

{

System.out.println("***********欢迎进入文件操作系统*******************");

System.out.println(" *******************1:创建文件*******************");

System.out.println("*******************2:删除文件*******************");

System.out.println("*******************3:修改文件*******************");

System.out.println("*******************4:创建文件夹*******************");

System.out.println("*******************5:删除文件夹*******************");

System.out.println("*******************6:查询文件夹下所有的列表*******************");int choose =input.nextInt();switch(choose){case 1://创建文件

createNewFile();break;case 2://删除文件

deleteNewFile();break;case 3://修改文件

updateNewFile();break;case 4://创建文件夹

mkdirs();break;case 5://删除文件夹

deletemkdirs();break;case 6://查询文件夹下所有的列表

findFileList();break;

}

}

创建文件

private static voidcreateNewFile()

{

System.out.println("请输入文件的名称:(默认为E:/)");

String fileName=input.next();//创建文件

File file=new File("E:/"+fileName);//默认的路径

if(file.exists()){

System.out.println("该文件已存在!");

}else{try{boolean flag =file.createNewFile();if(flag){

System.out.println("文件夹创建成功");

}else{

System.out.println("文件夹创建失败");

}

}catch(IOException e) {

e.printStackTrace();

}

}

}

删除文件

private static voiddeleteNewFile()

{

System.out.println("请输入你要删除的文件名称:(默认为E:/)");

String fileName=input.next();//创建File对象

File file =new File("E:/"+fileName);if(file.exists()){boolean flag =file.delete();if(flag)

{

System.out.println("删除成功");

}else{

System.out.println("删除失败");

}

}else{

System.out.println("该文件不存在");

}

}

修改文件

private static voidupdateNewFile()

{

System.out.println("请你输入需要修改的文件的名称:(默认为E:/)");

String oldFileName=input.next();

System.out.println("请你输入文件的新名称:(默认为E:/)");

String newFileName=input.next();//创建File对象

File oldFile=new File("E:/"+oldFileName);

File NewFile=new File("E:/"+newFileName);if(oldFile.renameTo(NewFile)){

System.out.println("修改成功");

}else{

System.out.println("修改失败");

}

}

创建文件夹

private static voidmkdirs() {

System.out.println("请输入你要创建的文件名称:(默认为E:/)");

String fileName=input.next();//创建File对象

File file =new File("E:/"+fileName);if(file.mkdirs()){

System.out.println("创建成功");

}else{

System.out.println("创建失败");

}

}

删除文件夹

一:删除文件夹的方法(先删除文件夹里面的东西在删除文件)

public static voiddelFolder(String folderPath) {try{

delAllFile(folderPath);//删除完里面所有内容

String filePath =folderPath;

filePath=filePath.toString();

java.io.File myFilePath= newjava.io.File(filePath);

myFilePath.delete();//删除空文件夹

} catch(Exception e) {

e.printStackTrace();

}

}

二:删除文件夹的方法

public static booleandelAllFile(String path) {boolean flag = false;

File file= newFile(path);if (!file.exists()) {returnflag;

}if (!file.isDirectory()) {returnflag;

}

String[] tempList=file.list();

File temp= null;for (int i = 0; i < tempList.length; i++) {if(path.endsWith(File.separator)) {

temp= new File(path +tempList[i]);

}else{

temp= new File(path + File.separator +tempList[i]);

}if(temp.isFile()) {

temp.delete();

}if(temp.isDirectory()) {

delAllFile(path+ tempList[i]);//先删除文件夹里面的文件

delFolder(path + tempList[i]);//再删除空文件夹

flag = true;

}

}returnflag;

}

三:删除文件夹的终极方法

private static voiddeletemkdirs() {

System.out.println("请输入你要删除的文件夹名称:(默认为E:/)");

String fileName=input.next();//创建File对象

File file =new File("E:/"+fileName);if(file.exists()){boolean flag = delAllFile("E:/qqq");if(flag)

{

System.out.println("删除失败");

}else{

file.delete();

System.out.println(" 删除成功");

}

}else{

System.out.println("该文件不存在");

}

}

java 类持久化_Java 持久化之 -- IO 全面整理(看了绝不后悔)相关推荐

  1. java 类 解析_Java类详解

    1 //package 语句 声明 类的位置,会建立相应的文件夹,存放类2 //package 包名; 只能有一条,不能写多个 3 packageorg.java;4 5 //import 语句6 / ...

  2. java类编译_java类编译过程

    title: java类加载系列之---类编译揭秘 date: 2018-07-17 11:48:02 category: 原创 tags: [Java,Java类编译加载执行专题] 本文为java类 ...

  3. java 类交互图_Java与UML交互图

    前面我们主要讨论的是UML类图,下面我们要讨论的是另一种UML图--交互图(Interaction Diagram).交互图描述的是一组对象之间的交互过程,或者说,这里我们实际上要回答这样一个问题:& ...

  4. java类描述_java笔记2:Java语言中的类和对象的描述

    在Java 语言中,除8 个基本数据类型值之外, 一切都是对象,而对象就是面向对象程序设计的中心. 对象是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还 ...

  5. java 类隔离_Java类装载体系中的隔离性

    正文 Java中类的查找与装载出现的问题总是会时不时出现在Java程序员面前,这并 不是什么丢脸的事情,相信没有一个Java程序员没遇到过ClassNotException,因此不要为被人瞅见自己也犯 ...

  6. java 类编译_Java类编译、加载、和执行机制

    Java类编译.加载.和执行机制 标签: java 类加载 类编译 类执行 机制 0.前言 个人认为,对于JVM的理解,主要是两大方面内容: Java类的编译.加载和执行. JVM的内存管理和垃圾回收 ...

  7. java 类文件_Java类文件概述

    所谓 Java 类文件,就是通常用 javac 编译器产生的 .class 文件.这些文件具有严格定义的格式. Java 源文件经过 javac 编译器编译之后,将会生成对应的二进制文件(如下图所示) ...

  8. java中io流是类吗_Java中的IO流

    今天刚刚看完java的io流操作,把主要的脉络看了一遍,不能保证以后使用时都能得心应手,但是最起码用到时知道有这么一个功能可以实现,下面对学习进行一下简单的总结: IO流主要用于硬板.内存.键盘等处理 ...

  9. Java与汽车_Java NIO:IO与NIO的区别

    一.概念 NIO即New IO,这个库是在JDK1.4中才引入的.NIO和IO有相同的作用和目的,但实现方式不同,NIO主要用到的是块,所以NIO的效率要比IO高很多.在Java API中提供了两套N ...

最新文章

  1. 聊一聊今年实例分割领域的进展和未来展望
  2. ## **scrapy+kafka+sparkstream爬取京东Iphone12评论储存数据**
  3. python对象编程例子-python(十二)面向对象编程、类
  4. Boost:bind绑定的测试自定义占位符
  5. python3.7怎么安装turtle_python怎么安装turtle
  6. 32利用文件系统保存数据_网易技术实践|Docker文件系统实战
  7. HTTPS上线过程说明
  8. 芯片人才平均薪资近万元 2020年芯片人才缺口超30万
  9. 使用Python实现电子邮件群发功能
  10. 如何设计Android App测试用例
  11. Anaconda——如何“重命名”conda虚拟环境(通过复制和删除操作实现)
  12. 【回归预测】基于matlab麻雀算法优化LSSVM回归预测【含Matlab源码 1128期】
  13. 没有他的帅气,也要像他那般努力!(转载)
  14. 安卓和ios针对小程序兼容以及小程序技术实现上本身遇到的一些问题
  15. 剑指offer——链表题目集合(Python)
  16. JAVA初学习(三)(数组和面向对象)
  17. 你真的会用苹果备忘录吗?iPhone用户必须学会的10个备忘录使用技巧
  18. java基础周报_java第四周周报
  19. 给你一个杯子,你如何测试
  20. 【转】人家在美国怎么过的,7年,我无比惭愧

热门文章

  1. 面向Java程序员的20大Spring REST面试问题答案
  2. Java 9中的进程处理
  3. SpringBoot:使用JdbcTemplate
  4. C#vs Java哪一个更快? 将25k C#转换为Java(2)
  5. Java IO基准测试:Quasar与异步ForkJoinPool与ManagedBlock
  6. Java Minor发布计划再次进行了调整
  7. 编写干净的测试–验证或不验证
  8. 使用Camel在Amazon上构建分布式工作流应用程序
  9. jclouds的命令行界面
  10. 如何用Veripacks替换构建模块