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第 ...
随机推荐
- day9学python 类+异常处理+初识socket
类+异常处理+初识socket 类的特点: 1.封装-同其他语言 2.继承 py2 经典类深度优先 新式类类名(object)广度优先py3 都是广度优先 3.多态-python本身无多态 可用方法调 ...
- AutoCAD.Net 实现创建wipeout遮罩实体
[CommandMethod("mywipeout")] public static void mywipeout() { // 获取当前文档和数据库 Document acDoc ...
- acedSSGet使用自定义提示字符:$模式
ads_name ss; struct resbuf *pRbList=NULL; pRbList=acutBuildList(RTDXF0,_T("lwpolyline,ins ...
- 对drf序列化器的理解
序列化: 将对象的状态信息转换为可以存储或传输的形式的过程.(百度定义) 对应到drf中,序列化即把模型对象转换为字典形式, 再返回给前端,主要用于输出 反序列化: 把其他格式转化为程序中的格式. 对 ...
- 基础篇:6.9)GD&T较线性尺寸公差的优缺点
本章目的:理解GD&T标注对比线性/传统/坐标尺寸公差的优势,但也不要忘记其使用限制. 1.线性尺寸公差 1.1 定义 线性尺寸公差=传统尺寸公差=坐标尺寸公差. 传统尺寸公差(Tradi ...
- bzoj2938 poi病毒 AC自动机
题目传送门 思路: 要求构建一个字符串,使得这个字符串不包含给出的任意一个单词. 如果我们已经构建出了一个安全代码,放在ac自动机上跑,那么我们必定不能得到任何一个字符串,此时我们得到的fail指针必 ...
- python __getattribute__、__getattr__、__setattr__详解
__getattribute__ 官方文档中描述如下: 该方法可以拦截对对象属性的所有访问企图,当属性被访问时,自动调用该方法(只适用于新式类).因此常用于实现一些访问某属性时执行一段代码的特性. 需 ...
- ifconfig无输出的原因及解决办法
问题 执行 ifconfig 命令无任何报错,也无任何输出信息 [root@linuxprobe ~]# ifconfig[root@linuxprobe ~]# 排错 1. 检查PATH变量 [r ...
- 第十一次 Scrum Meeting
第十一次 Scrum Meeting 写在前面 会议时间 会议时长 会议地点 2019/4/18 21:00 20min 大运村1号楼6F 附Github仓库:WEDO 例会照片 工作情况总结 人员 ...
- cucumber & selenium & bddtest
目录 1.Cucumber介绍 refer link: 2.使用步骤 2.1 引入依赖 2.2新建test.future文件 2.3在resource目录下创建cucumber.bat,执行bat,c ...