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第 ...
随机推荐
- Elasticsearch学习(1) Spring boot整合Elasticsearch
本文的Spring Boot版本为1.5.9,Elasticsearch版本为2.4.4,话不多说,直接上代码. 一.启动Elasticsearch 在官网上下载Elasticsearch后,打开bi ...
- 牛客挑战赛30D 小A的昆特牌(组合数学)
题面 传送门 题解 很容易写出一个暴力 \[\sum_{i=l}^r {i+n-1\choose n-1}{s-i+m\choose m}\] 即枚举选了多少个步兵,然后用插板法算出方案数 我们对这个 ...
- dataTable 从服务器获取数据源的两种表现形式
var table = $('#example1').DataTable({ "processing": true,//加载效果 "autoWidth": fa ...
- UIViewController读书笔记
当一个VC把另一个VC作为子view加到自己的view时,一定要先调用addChildViewController(_:)方法. 因为一个VC的root view,也就是VC的view只能被这个VC持 ...
- Python脚本模板
1.Python脚本规范基础模板 #coding:utf8 import time, re, os, sys, time,urllib2,shutil,string import json,datet ...
- P1642 规划 01分数规划+树形DP
$ \color{#0066ff}{ 题目描述 }$ 某地方有N个工厂,有N-1条路连接它们,且它们两两都可达.每个工厂都有一个产量值和一个污染值.现在工厂要进行规划,拆除其中的M个工厂,使得剩下的工 ...
- AHB协议
AHB2 支持多个Bus Master,例如有三个Master,有四个slave,但是同时只有一个Mater可以拿到Bus的访问权.所以,总线的使用权就需要Master去申请,也就需要一个仲裁器(Ar ...
- ajax乱码的问题
ajax 乱码情况与原因很多,本文只讲其中之一: 浏览器端正常的数据,用ajax提交到服务器上就乱码了. 当ajax的提交方式是get而不是post时,其所携带的数据不会被字符编码过滤器所拦截(事实上 ...
- 手机端页面调试工具-vconsole使用
用的是VUE-CLI3第一步.安装vconsole npm install vconsole 第二步.创建js文件并写入内容 import Vconsole from 'vconsole' let v ...
- MongoDB基本增删改查操作-mongo shell
基础 1.查看所有数据库: show dbs 2.选择数据库: use test 3.查看数据库中有哪些集合: show collections 如下图: 查询 1.查看集合中有哪些数据,其中abc为 ...