目录:

一、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,用字节流写文件

package com.dzq;
import java.io.*;
/**
* 字节流 InputStream OutputStream
*/
public class ByteDemo {
public static void main(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,用字符流文件

package com.dzq;
import java.io.*;
/*
* 字符流 Reader Writer
*/
public class CharDemo{
public static void main(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=new StringBuffer();
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

package com.dzq;
import java.io.*;
/*
*二进制流 DataInputStream DataOutputStream
*/
public class DataDemo {
public static void main(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=new DataOutputStream(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)

package com.dzq;
import java.io.*;
/**
*缓冲流 BufferReader BufferWriter
*/
public class BufferDemo {
public static void main(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=new StringBuffer();
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类:

package com.cd;
import java.io.Serializable;
public class User implements Serializable{
public String username;
public String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public User(String username, String password) {
this.username = username;
this.password = password;
}
public User(){
}
}

各方法:

package com.cd;
/**
* 序列化和非序列化
*/
import java.io.*;
import java.util.Scanner;
public class ObjectDemo {
static Scanner input=new Scanner(System.in);
//创建输出流和输入流
static InputStream inputStream=null;
static OutputStream outputStream=null;
static ObjectInputStream objectInputStream=null;
static ObjectOutputStream objectOutputStream=null;
public static void main(String[] args) {
//登录
Login();
//注册
register();
}
//注册
private static void register() {
User user =new User();
System.out.println("请输入你的用户名");
user.setUsername(input.next());
System.out.println("请输入你的密码");
user.setPassword(input.next());
try {
outputStream=new FileOutputStream("e:/aaa.txt");
objectOutputStream=new ObjectOutputStream(outputStream);
//把对象输出到文件中
objectOutputStream.writeObject(user);
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
objectOutputStream.close();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
//登录
private static void Login() {
try {
inputStream=new FileInputStream("e:/user.txt");
objectInputStream=new ObjectInputStream(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.6 Java IO :字节流转换为字符流InputStreamReader

public static void convertByteToChar() throws IOException{
File file= new File( "d:/test.txt");
//获得一个字节流 InputStream is= new FileInputStream( file);
//把字节流转换为字符流,其实就是把字符流和字节流组合的结果。
Reader reader= new InputStreamReader( is);
char [] byteArray= new char[( int) file.length()];
int size= reader.read( byteArray);
System. out.println( "大小:"+size +";内容:" +new String(byteArray));
is.close();
reader.close();
}

3.7 File 操作文件

DEMO:

public class FileDemo
{
static Scanner input =new Scanner(System.in);
public static void main( 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 void createNewFile()
{
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 void deleteNewFile()
{
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 void updateNewFile()
{
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 void mkdirs() {
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 void delFolder(String folderPath) {
try {
delAllFile(folderPath); //删除完里面所有内容
String filePath = folderPath;
filePath = filePath.toString();
java.io.File myFilePath = new java.io.File(filePath);
myFilePath.delete(); //删除空文件夹
} catch (Exception e) {
e.printStackTrace();
}
}

二:删除文件夹的方法

public static boolean delAllFile(String path) {
boolean flag = false;
File file = new File(path);
if (!file.exists()) {
return flag;
}
if (!file.isDirectory()) {
return flag;
}
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;
}
}
return flag;
}

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

private static void deletemkdirs() {
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 持久化之 -- IO 全面整理(看了绝不后悔)的更多相关文章

  1. Java基础之IO流整理

    Java基础之IO流 Java IO流使用装饰器设计模式,因此如果不能理清其中的关系的话很容易把各种流搞混,此文将简单的几个流进行梳理,后序遇见新的流会继续更新(本文下方还附有xmind文件链接) 抽 ...

  2. Java 持久化之 --io流与序列化操作

    1)File类操作文件的属性 1.File类的常用方法 1. 文件的绝对完整路径:getAbsolutePath() 文件名:getName() 文件相对路径:getPath() 文件的上一级目录:g ...

  3. 近5年常考Java面试题及答案整理(三)

    上一篇:近5年常考Java面试题及答案整理(二) 68.Java中如何实现序列化,有什么意义? 答:序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化.可以对流化后的对象进行读写 ...

  4. 2018年最新Java面试题及答案整理(持续完善中…)

    2018年最新Java面试题及答案整理(持续完善中…) 基础篇 基本功 面向对象特征 封装,继承,多态和抽象 封装封装给对象提供了隐藏内部特性和行为的能力.对象提供一些能被其他对象访问的方法来改变它内 ...

  5. Java 面试/笔试题神整理 [Java web and android]

    Java 面试/笔试题神整理 一.Java web 相关基础知识 1.面向对象的特征有哪些方面 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并 ...

  6. java 开发面试题小整理(一)

    本篇文档将持续更新,有基础滴,也有深层次的,谢谢! 1.看下面的程序是否有问题,如果有问题,请指出并说明理由. * byte b1 = 3; * byte b2 = 4; * byte b3 = b1 ...

  7. Elasticsearch Java API 很全的整理

    Elasticsearch 的API 分为 REST Client API(http请求形式)以及 transportClient API两种.相比来说transportClient API效率更高, ...

  8. Java中的IO流 - 入门篇

    前言 大家好啊,我是汤圆,今天给大家带来的是<Java中的IO流-入门篇>,希望对大家有帮助,谢谢 由于Java的IO类有很多,这就导致我刚开始学的时候,感觉很乱,每次用到都是上网搜,结果 ...

  9. java nio 与io区别

    转自:http://blog.csdn.net/keda8997110/article/details/19549493 当学习了Java NIO和IO的API后,一个问题马上涌入脑海: 我应该何时使 ...

随机推荐

  1. OpenStack 图形化服务 Horizon使用(十三)

    构建一台云主机 上图中Count可以选择同时创建多台 最终“启动实例” 创建成功后,可以进入控制台,操作新建云主机

  2. CXF wsdl2java 生成java代码供客户端使用

    CXF wsdl2java 生成java代码供客户端使用 环境配置:1.下载apache-cxf-2.6.2在环境变量中配置CXF_HOME 值为E:\gavin\cxf\apache-cxf-3.0 ...

  3. MySQL和Sql Server的sql语句区别

    1.自增长列的插入:SQLServer中可以不为自动增长列插入值,MySQL中需要为自动增长列插入值. 2.获取当前时间函数:SQLServer写法:getdate()MySQL写法:now() 3. ...

  4. 从ACM会议分析我国计算机科学近十年发展情况

    从ACM会议分析我国计算机科学近十年发展情况 来源:<中国计算机学会通讯>2015年第10期<专栏> 作者:陈 钢 2006年,承蒙李国杰院士推荐,<中国计算机学会通讯& ...

  5. ASP.NET MVC学习(二)之控制器Controller

    1.控制器 Controller接收用户请求,将Model和View匹配在一起,共同完成用户请求.它是一个分发器,通过选择不同的Model.View,可以决定完成不同的用户请求. 但Controlle ...

  6. iOS 中nil,Nil,NULL,NSNull的区别

    类与对象的概念 类是对同一类事物高度的抽象,类中定义了这一类对象所应具有的静态属性(属性)和动态属性(方法). 对象是类的一个实例,是一个具体的事物. 类与对象是抽象与具体的关系. 类其实就是一种数据 ...

  7. Linux - awk 文本处理工具二

    awk 判断格式 awk '{print ($1>$2)?"第一排"$1:"第二排"$2}' # 条件判断 括号代表if语句判断 "?" ...

  8. Anaconda+django写出第一个web app(八)

    今天来实现网站的登入和登出功能. 首先我们需要在urls.py中添加路径,注意此处的路径和在导航栏中设置的文字路径保持一致: from django.urls import path from . i ...

  9. CSS marging相关

    一.margin可以为负值 在盒模型中,内容区的width/height.padding.border都不能为负值,但是margin例外,它可以为负值. margin负值的本质,在于它改变了元素在普通 ...

  10. linux的内存文件系统tmpfs

    在centos系统上自带的内存文件系统.这个tmpfs是temporary file system的意思. 一. 使用命令 df -h 查看tmpfs是否正在运行. Filesystem Size U ...