一、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. 洛谷P4705 玩游戏(生成函数+多项式运算)

    题面 传送门 题解 妈呀这辣鸡题目调了我整整三天--最后发现竟然是因为分治\(NTT\)之后的多项式长度不是\(2\)的幂导致把多项式的值存下来的时候发生了一些玄学错误--玄学到了我\(WA\)的点全 ...

  2. [Swift]复数的表示和四则运算

    我们把形如z=a+bi(a,b均为实数)的数称为复数,其中a称为实部,b称为虚部,i称为虚数单位. 当虚部等于零时,这个复数可以视为实数:当z的虚部不等于零时,实部等于零时,常称z为纯虚数. 复数域是 ...

  3. java执行命令行命令

    package javai; import java.io.BufferedReader; import java.io.InputStreamReader; public class IOTest ...

  4. 编译图像质量分析库iqa

    介绍   iqa库是我在GitHub上偶然发现的一个具有MSE, PSNR, SSIM, MS-SSIM等图像质量分析算法的库,觉得还不错,就把它下载下来编译,编译后生成静态的库.以下是我总结的编译方 ...

  5. 报错The sandbox is not in sync with the Podfile.lock

    clone下来的项目,运行的时候报错 diff: /../Podfile.lock: No such file or directory diff: Manifest.lock: No such fi ...

  6. 时区缩写 UTC, CST, GMT, CEST 以及转换

    UTC是协调世界时(Universal Time Coordinated)英文缩写,是由国际无线电咨询委员会规定和推荐,并由国际时间局(BIH)负责保持的以秒为基础的时间标度.UTC相当于本初子午线( ...

  7. anaconda安装出现failed to create anacoda menue

    1.卸载Anaconda后重新安装Anaconda出现各种问题,粗暴解决方式:直接将安装目录放在C盘主路径下,完美解决. 2.然后无选择忽略,忽略,忽略,提示安装成功,依旧没有 菜单 进入 cmd,找 ...

  8. 【医学影像】《Dermatologist-level classification of skin cancer with deep neural networks》论文笔记

    这是一篇关于皮肤癌分类的文章,核心就是分类器,由斯坦福大学团队发表,居然发到了nature上,让我惊讶又佩服,虽然在方法上没什么大的创新,但是论文本身的工作却意义重大,并且这篇17年见刊的文章,引用量 ...

  9. c++重载operator的示例 非原创

    #include<iostream> #include<vector> using namespace std; class test{ public: int v; /*构造 ...

  10. [转] maven打包可运行的fat-jar的简单方法

    [From] https://blog.csdn.net/tearsky253/article/details/75948721 问题 在使用“mvn package”命令编译application之 ...