Java 持久化之 -- IO 全面整理(看了毫不后悔)

 

目录:java

 

1、java io 概述

什么是IO

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

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

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

什么是

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

2、Java IO类库的框架

2.1 Java IO的类型

虽然java IO类库庞大,但整体来讲其框架仍是很清楚的。从是读媒介仍是写媒介的维度看,Java IO能够分为:spa

1. 输入流:InputStream和Reader操作系统

2. 输出流:OutputStream和Writer设计

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

1. 字节流:InputStream和OutputStream对象

2. 字符流:Reader和Writer

 

01File

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

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与目标媒介相关联。 如下的图说明了这一点:

 

 

3、Java IO的基本用法

3.1 Java IO :字节流字节流对应的类应该是InputStreamOutputStream

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 :字符流字符流对应的类应该是ReaderWriter

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("该文件不存在"); } }
相关文章
相关标签/搜索