一、IO 概述

1、IO 概念

  IO:I 代表 Input 输入;O 代表 Output 输出。

  Java 中 IO 是以流为基础进行输入输出,所有的数据被串行化(保存)写入输出流,或者从输入流读入。

  注:数据串行化指把对象的状态以特定的形式(比如 byte[])保存到流,通过流的方式写入。

2、IO 的作用

  1、文本文件,通过特定方法能够把数据写到文件,也能够读取出文件中的内容。

  2、把信息保存到磁盘文件中。

3、Java 操作文件

1、创建 File 对象方式

  测试创建文件的三种方式:

 import org.junit.Test;

 import java.io.File;

 /**
* @author zt1994
* @date 2018/3/2 10:56
*/
public class CreateFile { /**
* 测试创建文件的三种方式,仅仅在程序中创建File对象
*/
@Test
public void testCreateFile(){
//1、File(String pathname) 通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。
File file = new File("test1.txt"); //相对路径(相对于当前工程)
File file1 = new File("D:\\file\\test1.txt");//绝对路径 //2、File(String parent, String child) 根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。
File file2 = new File("D:\\file\\", "test2.txt"); //3、File(File parent, String child) 根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。
File file3 = new File(new File("D:\\file\\"), "test3.txt"); System.out.println(file); //test1.txt
System.out.println(file1); //D:\file\test1.txt
System.out.println(file2); //D:\file\test2.txt
System.out.println(file3); //D:\file\test3.txt
}
}

2、创建删除文件和文件夹

1、创建文件

 import org.junit.Test;

 import java.io.File;
import java.io.IOException; /**
* @author zt1994
* @date 2018/3/2 11:16
*/
public class CreateNewFile { /**
* 在磁盘上面创建文件
* 1、创建文件的路径必须存在,否则抛出异常
* 2、如果文件已经存在,返回false
* 3、此方法只能创建文件,不能创建文件夹
*/
@Test
public void testCreateNewFile() throws IOException {
File file1 = new File("D:\\test.txt");//绝对路径
boolean b = file1.createNewFile();
System.out.println(b);
}
}

2、创建和删除文件夹

  测试创建和删除文件夹:

 import java.io.File;

 /**
* @author zt1994
* @date 2018/3/2 11:27
*/
public class CreateDir {
/**
* 测试和删除创建文件夹
*/
@Test
public void testMakeDir(){
//创建文件夹
File dir = new File("E:\\testIo");
System.out.println(dir);
//1、创建单层文件夹
boolean mkdir = dir.mkdir();
System.out.println(mkdir); //2、创建多层文件夹
File dirs = new File("E:\\Demo\\test\\file");
boolean mkdirs = dirs.mkdirs();
System.out.println(mkdirs);
boolean deleteDirs = dirs.delete(); //删除
System.out.println(deleteDirs); //删除文件夹 public boolean delete()
boolean delete = dir.delete();
System.out.println(delete);
}
}

3、其他常用方法

  boolean exists() 测试文件或者目录是否存在;

  String getName() 得到文件或者目录的名称;

  String getParent() 返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null。

  boolean isFile() 测试是否是一个文件;

  boolean isDirectory 测试是否一个目录;

3、删除文件夹目录的全部内容(递归删除)

 import org.junit.Test;

 import java.io.File;
import java.io.IOException; public class TestDeleteAll {
/**
* 删除文件夹内所有文件,递归删除
*/
@Test
public void testDeleteAll(){
//创建一个多层文件夹
File file = new File("E:\\Demo\\test\\file");
file.mkdirs(); File file1 = new File("E:\\Demo");
deleteAll(file1); } //删除指定目录下所有文件
public static void deleteAll(File file){
if (file.isFile() || file.list().length==0){
file.delete();
}else {
File[] files = file.listFiles();
for (File f:files){
deleteAll(f); //调用方法自身
f.delete();
}
}
}
}

二、IO 流读写文件

1、IO 流分类

1、按流动方向分类

  输入流和输出流,流动方向是相对的。

2、按数据的单位分类

  字节流和字符流。

  测试 IO 流代码:

 import org.junit.Test;

 import java.io.*;

 /**
* 输出流和输入流程测试
*/
public class TestIoStream {
/**
* 1.读取单个字符和字符转换
*/
@Test
public void test1() throws IOException {
//创建文件对象
File file = new File("f1.txt"); FileInputStream fileInputStream = new FileInputStream(file); int i = fileInputStream.read();
System.out.println(i); //字符编码转换
char x = (char) i;
System.out.println(x);
} /**
* 2.读取多个字符
*/
@Test
public void test2() throws Exception {
File file = new File("f1.txt");
FileInputStream fileInputStream = new FileInputStream(file); byte[] fs = new byte[(int) file.length()];
while (fileInputStream.read(fs) != -1){
System.out.println(new String(fs));
for (byte b: fs){
System.out.print((char) b);
}
} fileInputStream.close();
} /**
* 3.输出流,会覆盖
* @throws IOException
*/
@Test
public void test3() throws IOException {
File file = new File("f1.txt"); FileOutputStream fileOutputStream = new FileOutputStream(file); String str = "你好,世界!"; //获取字符串数组对象
byte[] bytes = str.getBytes(); fileOutputStream.write(bytes);
fileOutputStream.flush();
fileOutputStream.close();
} /**
* 4.字符流输入
*/
@Test
public void test4() throws IOException {
FileReader fileReader = new FileReader("f1.txt"); boolean f = true;
while(f){ int read = fileReader.read();
System.out.print((char) read);
if (read == -1){
f = false;
}
}
} /**
* 5.字符流输出
*/
@Test
public void test5() throws IOException {
FileWriter fileWriter = new FileWriter("f1.txt"); fileWriter.write("方便的输出"); fileWriter.close();
} /**
* 6.字节流转字符流
*/
@Test
public void test6() throws IOException {
FileInputStream inputStream = new FileInputStream("f1.txt");
InputStreamReader reader = new InputStreamReader(inputStream, "utf-8"); boolean f = true;
while (f){
int i = reader.read();
System.out.print((char) i);
if (i == -1){
f = false;
}
}
}
}

3、字节流和字符流的区别

①操作的单位不一样,一个是字节,一个是字符;

②操作中文使用字符流很爽;

③字符流的输出流可以直接写一个字符串 write(String msg);

④执行流程:

  字节输出流  --》程序 --》文件

  字符输出流  --》程序 --》缓存 ---》文件

测试:

A:字节流调用了写数据的方法之后如果没有关闭,还是会把数据写到文件;

B:字符流调用了写数据的方法之后如果没有关闭,不会把数据写到文件;

Java基础(十二)IO输入输出的更多相关文章

  1. Java基础十二--多态是成员的特点

    Java基础十二--多态是成员的特点 一.特点 1,成员变量. 编译和运行都参考等号的左边. 覆盖只发生在函数上,和变量没关系. Fu f = new Zi();System.out.println( ...

  2. Java基础(十二)--clone()方法

    Clone在Java中就是用来复制对象,通过分配一个和源对象相同大小的内存空间,然后创建一个新的对象,那么他和=的区别在哪? 通过=实现对象拷贝: @Data @NoArgsConstructor @ ...

  3. java基础(十二 )-----Java泛型详解

    本文对java的泛型的概念和使用做了详尽的介绍. 概述 泛型在java中有很重要的地位,在面向对象编程及各种设计模式中有非常广泛的应用. 什么是泛型?为什么要使用泛型? 泛型,即“参数化类型”.一提到 ...

  4. Java基础(十二)之包和权限访问

    软件包 软件包解决了两个类名字一样的问题.软件包就是一个"文件夹". 包名的命名规范:1.要求所有字母都小写:2.包名一般情况下,是你的域名倒过来写.比如baidu.com,pac ...

  5. java基础十二[集合与泛型](阅读Head First Java记录)

    集合 List 知道索引顺序的集合,ArrayList.LinkedList.Vector三个子类实现了List接口   ArrayList ArrayList没有排序方法,可以用Collection ...

  6. Java实习生常规技术面试题每日十题Java基础(二)

    目录 1. JAVA 的反射机制的原理. 2.静态嵌套类(Static Nested Class)和内部类(Inner Class)的不同? 3.如何将String类型转化成Number类型. 4.什 ...

  7. Bootstrap <基础十二>下拉菜单(Dropdowns)

    Bootstrap 下拉菜单.下拉菜单是可切换的,是以列表格式显示链接的上下文菜单.这可以通过与 下拉菜单(Dropdown) JavaScript 插件 的互动来实现. 如需使用下列菜单,只需要在 ...

  8. Java基础十--接口

    Java基础十--接口 一.接口的定义和实例 /* abstract class AbsDemo { abstract void show1(); abstract void show2(); } 8 ...

  9. “全栈2019”Java第九十二章:外部类与内部类成员覆盖详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  10. “全栈2019”Java第十二章:变量

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

随机推荐

  1. Elasticsearch学习(1) Spring boot整合Elasticsearch

    本文的Spring Boot版本为1.5.9,Elasticsearch版本为2.4.4,话不多说,直接上代码. 一.启动Elasticsearch 在官网上下载Elasticsearch后,打开bi ...

  2. 牛客挑战赛30D 小A的昆特牌(组合数学)

    题面 传送门 题解 很容易写出一个暴力 \[\sum_{i=l}^r {i+n-1\choose n-1}{s-i+m\choose m}\] 即枚举选了多少个步兵,然后用插板法算出方案数 我们对这个 ...

  3. dataTable 从服务器获取数据源的两种表现形式

    var table = $('#example1').DataTable({ "processing": true,//加载效果 "autoWidth": fa ...

  4. UIViewController读书笔记

    当一个VC把另一个VC作为子view加到自己的view时,一定要先调用addChildViewController(_:)方法. 因为一个VC的root view,也就是VC的view只能被这个VC持 ...

  5. Python脚本模板

    1.Python脚本规范基础模板 #coding:utf8 import time, re, os, sys, time,urllib2,shutil,string import json,datet ...

  6. P1642 规划 01分数规划+树形DP

    $ \color{#0066ff}{ 题目描述 }$ 某地方有N个工厂,有N-1条路连接它们,且它们两两都可达.每个工厂都有一个产量值和一个污染值.现在工厂要进行规划,拆除其中的M个工厂,使得剩下的工 ...

  7. AHB协议

    AHB2 支持多个Bus Master,例如有三个Master,有四个slave,但是同时只有一个Mater可以拿到Bus的访问权.所以,总线的使用权就需要Master去申请,也就需要一个仲裁器(Ar ...

  8. ajax乱码的问题

    ajax 乱码情况与原因很多,本文只讲其中之一: 浏览器端正常的数据,用ajax提交到服务器上就乱码了. 当ajax的提交方式是get而不是post时,其所携带的数据不会被字符编码过滤器所拦截(事实上 ...

  9. 手机端页面调试工具-vconsole使用

    用的是VUE-CLI3第一步.安装vconsole npm install vconsole 第二步.创建js文件并写入内容 import Vconsole from 'vconsole' let v ...

  10. MongoDB基本增删改查操作-mongo shell

    基础 1.查看所有数据库: show dbs 2.选择数据库: use test 3.查看数据库中有哪些集合: show collections 如下图: 查询 1.查看集合中有哪些数据,其中abc为 ...