Java基础(十二)IO输入输出
一、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输入输出的更多相关文章
- Java基础十二--多态是成员的特点
Java基础十二--多态是成员的特点 一.特点 1,成员变量. 编译和运行都参考等号的左边. 覆盖只发生在函数上,和变量没关系. Fu f = new Zi();System.out.println( ...
- Java基础(十二)--clone()方法
Clone在Java中就是用来复制对象,通过分配一个和源对象相同大小的内存空间,然后创建一个新的对象,那么他和=的区别在哪? 通过=实现对象拷贝: @Data @NoArgsConstructor @ ...
- java基础(十二 )-----Java泛型详解
本文对java的泛型的概念和使用做了详尽的介绍. 概述 泛型在java中有很重要的地位,在面向对象编程及各种设计模式中有非常广泛的应用. 什么是泛型?为什么要使用泛型? 泛型,即“参数化类型”.一提到 ...
- Java基础(十二)之包和权限访问
软件包 软件包解决了两个类名字一样的问题.软件包就是一个"文件夹". 包名的命名规范:1.要求所有字母都小写:2.包名一般情况下,是你的域名倒过来写.比如baidu.com,pac ...
- java基础十二[集合与泛型](阅读Head First Java记录)
集合 List 知道索引顺序的集合,ArrayList.LinkedList.Vector三个子类实现了List接口 ArrayList ArrayList没有排序方法,可以用Collection ...
- Java实习生常规技术面试题每日十题Java基础(二)
目录 1. JAVA 的反射机制的原理. 2.静态嵌套类(Static Nested Class)和内部类(Inner Class)的不同? 3.如何将String类型转化成Number类型. 4.什 ...
- Bootstrap <基础十二>下拉菜单(Dropdowns)
Bootstrap 下拉菜单.下拉菜单是可切换的,是以列表格式显示链接的上下文菜单.这可以通过与 下拉菜单(Dropdown) JavaScript 插件 的互动来实现. 如需使用下列菜单,只需要在 ...
- Java基础十--接口
Java基础十--接口 一.接口的定义和实例 /* abstract class AbsDemo { abstract void show1(); abstract void show2(); } 8 ...
- “全栈2019”Java第九十二章:外部类与内部类成员覆盖详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- “全栈2019”Java第十二章:变量
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
随机推荐
- “全栈2019”Java第五十七章:多态与构造方法详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- RDLC报表的相关技巧一(不足N行用空行补齐)
为了广泛支持客户端,系统框架运行在.Net Framework 4.0之上,Report viewer的版本也限制在11.0.3366.16. 使用NUGET安装Microsoft.ReportVie ...
- 数据库管理工具navicat基本使用方法——以MySql为例
mysq数据库管理工具navicat基本使用方法 https://www.cnblogs.com/neuedu/p/5876874.html
- HDU3183 贪心/RMQ-ST表
A Magic Lamp Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...
- 快速启动工具Rulers 4.1
Rulers 4.1 Release 360云盘 https://yunpan.cn/cSbq5nx9GVwrJ 访问密码 0532 百度云 http://pan.baidu.com/s/1czCNR ...
- C# - 操作大型XML文件
对于小型XML文件,利用XDocument和XMLDocument可以很方便进行读写(推荐XDocument),但问题是XDocument和XMLDocument是In-Memory类型的,随着文件大 ...
- Python环境安装与升级
Python是跨平台的,它可以运行在Windows,Mac,Linux/Unix系统上,在Windows上写的Python程序,在Linux上也是能够运行的.目前,Python有两个大版本,一个是2. ...
- 无法下载APP
最近遇见下面的情况两次,各种搜索过资料,但是都没什么结果,把自己的解决方法分享如下: 实践证明,出现这个问题,应该是出现了下面几方面原因: 第一次遇见上述问题,是年后来到公司接手了新项目,然后不久传来 ...
- Java非静态代码块和静态代码块
类中存在两种特殊的代码块,即非静态代码块和静态代码块,前者是直接由 { } 括起来的代码,而后者是由 static{ } 括起来的代码. 非静态代码块在类初始化创建实例时,将会被提取到类的构造器中执行 ...
- python之类与对象(2)
3. 类函数的进阶 3.1 类函数调用类属性 关于类函数调用类属性,我们尝试修改前一节的内容,以我们在之前学习的内容,调用属性直接用%+属性就可以了,那我们来试一下: 看到了程序有报错,这其实是因为在 ...