1102javaIO流
程序员文章站
2022-03-20 08:25:50
...
IO流简介
流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。
IO 流的分类
- 根据处理数据类型的不同分为:字符流和字节流
- 根据数据流向不同分为:输入流和输出流
文件操作File 类
创建目录和文件
- public boolean mkdir() 创建此抽象路径名指定的目录
- public boolean createNewFile() 创建一个文件
package com.java1234.chap10.yun2;
import java.io.File;
import java.io.IOException;
import javax.print.attribute.standard.MediaName;
public class Demo1 {
public static void main(String[] args) throws IOException {
File file=new File("d://java创建目录");
boolean b=file.mkdir(); //创建虚拟目录
if (b) {
System.out.println("目录创建成功");
file=new File("d://java创建目录//java创建的文件.txt");
boolean b2=file.createNewFile(); //创建文件
if (b2) {
System.out.println("文件创建成功");
} else {
System.out.println("文件创建失败");
}
}
else {
System.out.println("目录创建失败");
}
}
}
删除文件或目录
- public boolean delete()删除此抽象路径名表示的文件或目录。如果此路径名表示一个目录,则该目录必须为空才能删除
- public boolean exists()测试此抽象路径名表示的文件或目录是否存在
package com.java1234.chap10.yun2;
import java.io.File;
import java.io.IOException;
import java.text.FieldPosition;
import javax.print.attribute.standard.MediaName;
public class Demo2 {
public static void main(String[] args) throws IOException {
File file=new File("d://java创建目录//java创建的文件.txt"); //把.txt也写上
if (file.exists()) { //文件存在
boolean b=file.delete();
if (b) {
System.out.println("删除文件成功");
} else {
System.out.println("删除文件失败");
}
}
else {
System.out.println("文件不存在");
}
file=new File("d://java创建目录");
if (file.exists()) { //目录存在
boolean b=file.delete();
if (b) {
System.out.println("删除目录成功");
} else {
System.out.println("删除目录失败");
}
}
}
}
遍历目录
- public File[] listFiles()返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件
package com.java1234.chap10.yun2;
import java.io.File;
public class Demo3 {
public static void main(String[] args) {
File file=new File("D:\\毕业设计");
File files[]=file.listFiles(); //遍历目录
for (int i = 0; i < files.length; i++) {
System.out.println(files[i]);
}
}
}
测试此路径是否为目录
- public boolean isDirectory() 测试此抽象路径名表示的文件是否是目录
package com.java1234.chap10.yun2;
import java.io.File;
/**
* 打印文件
* @author Administrator
*
*/
public class Demo4 {
public static void ListFile(File file) {
if (file!=null) {
if (file.isDirectory()) { //是目录
File f[]=file.listFiles(); //遍历目录
if (file!=null) {
for (int i = 0; i < f.length; i++) {
ListFile(f[i]); //递归调用
}
}
} else { //是文件
System.out.println(file);
}
}
}
public static void main(String[] args) {
File file=new File("D://毕业设计");
ListFile(file);
}
}
字节输入输出流
InputStream 读取文件
字节输入,硬盘的文件读取到内存,读取到内存后就可以显示了
也就是从硬盘到内存
一般不这么用,太浪费了
package com.java1234.chap10.yun3;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
/**
* @author WXYUNDI
* 2020-11-02_20:31:47
* InputStream读取文件到内存
*/
public class Demo1 {
public static void main(String[] args) throws Exception {
File file=new File("D:\\测试文件.txt");
InputStream inputStream=new FileInputStream(file); //实例化FileInputStream
byte b[]=new byte[1024];
int len=inputStream.read(b);
inputStream.close(); //关闭输入流
System.out.println("读取到的内容为:"+new String(b,0,len,"UtF-8"));
}
}
指定大小的字节数组,节省空间
public class Demo2 {
public static void main(String[] args) throws Exception {
File file=new File("D:\\测试文件.txt");
InputStream inputStream=new FileInputStream(file); //实例化FileInputStream
int FileLength=(int)file.length(); //文件长度
byte b[]=new byte[FileLength]; //指定大小的字节数组,节省空间
inputStream.read(b);
inputStream.close(); //关闭输入流
System.out.println("读取到的内容为:"+new String(b,"UtF-8"));
}
}
一个字节一个字节的读取,放到b字节数组里
public class Demo3 {
public static void main(String[] args) throws Exception {
File file=new File("D:\\测试文件.txt");
InputStream inputStream=new FileInputStream(file); //实例化FileInputStream
int FileLength=(int)file.length();
byte b[]=new byte[FileLength];
int temp=0;
int len=0;
while ((temp=inputStream.read())!=-1) {
//一个字节一个字节的读取,放到b字节数组里
b[len++]=(byte)temp;
}
inputStream.close(); //关闭输入流
System.out.println("读取到的内容为:"+new String(b,"UtF-8"));
}
}
OutputStream 写入文件
从内存到硬盘
FileOutputStream(file)默认会覆盖原来的内容,即默认为FileOutputStream(file,false);
改成FileOutputStream(file,true);就会在原有文件后边写了
package com.java1234.chap10.yun3;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
public class Demo4 {
public static void main(String[] args) throws Exception {
File file=new File("D:\\测试文件.txt");
OutputStream out=new FileOutputStream(file); //追加默认为false,改成(file,"true")就好了
String str="你好,我好,大家好";
byte b[]=str.getBytes();
out.write(b); //覆盖了
out.close();
}
}
缓冲和非缓冲的区别及性能对比
BufferedInputStream 和fBuferedOutputStream
package com.java1234.chap10.yun3;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
/**
* @author WXYUNDI
* 2020-11-02_21:43:49
* 缓冲提高效率
*/
public class Demo7 {
public static void bufferStream() throws Exception{
//定义一个带缓冲的字节输入流
BufferedInputStream bufferedInputStream=new BufferedInputStream(new FileInputStream("D:\\java基础教程笔记.docx"));
//定义一个带缓冲的字节输出流
BufferedOutputStream bufferedOutputStream=new BufferedOutputStream(new FileOutputStream("D:\\作业用\\复制的文件2.docx"));
int b=0;
long statrtime=System.currentTimeMillis();//开始时间
while ((b=bufferedInputStream.read())!=-1) {
bufferedOutputStream.write(b);
}
bufferedInputStream.close();
bufferedOutputStream.close();
long endtime=System.currentTimeMillis();//结束时间
System.out.println("缓冲花费的时间:"+(endtime-statrtime));
}
//非缓冲
public static void stream() throws Exception {
InputStream inputStream=new FileInputStream("D:\\java基础教程笔记.docx");
OutputStream outputStream=new FileOutputStream("D:\\作业用\\复制的文件.docx");
int b=0;
long statrtime=System.currentTimeMillis();//开始时间
while ((b=inputStream.read())!=-1) {
outputStream.write(b);
}
inputStream.close();
outputStream.close();
long endtime=System.currentTimeMillis();//结束时间
System.out.println("非缓冲花费的时间:"+(endtime-statrtime));
}
public static void main(String[] args) throws Exception {
stream();
bufferStream();
}
}
字符输入输出流
更强大一点
Reader 读取文件
package com.java1234.chap10.yun4;
import java.io.File;
import java.io.FileReader;
import java.io.Reader;
public class Demo1 {
public static void main(String[] args) throws Exception {
File file=new File("D:\\test.txt");
Reader reader=new FileReader(file);
char c[]=new char[1024];
int len=reader.read(c);
reader.close(); //关闭字符输入流
System.out.println("is:"+new String(c,0,len));
}
}
一个一个读
package com.java1234.chap10.yun4;
import java.io.File;
import java.io.FileReader;
import java.io.Reader;
public class Demo2 {
public static void main(String[] args) throws Exception {
File file=new File("D:\\test.txt");
Reader reader=new FileReader(file);
char c[]=new char[1024];
int temp=0;
int len=0;
while ((temp=reader.read())!=-1) {
c[len++]=(char)temp;
}
//int len=reader.read(c);
reader.close(); //关闭字符输入流
System.out.println("is:"+new String(c,0,len));
}
}
Writer 写入文件
Writer out=new FileWriter(file,true);不覆盖
package com.java1234.chap10.sec04;
import java.io.File;
import java.io.FileWriter;
import java.io.Writer;
public class Demo3 {
public static void main(String[] args) throws Exception {
File file=new File("D://test.txt");
Writer out=new FileWriter(file);//Writer out=new FileWriter(file,true);不覆盖
String str="我爱雨杰宝宝";
out.write(str); // 将字符串写入输出流
out.close(); // 关闭输出流
}
}
总结
-
一定别忘了close();
-
字节流的方法也太多了,掌握读取、写入、复制这些基本的,其他的慢慢研究吧
-
insert键表示插入状态,这样就不会写一个后边少一个了,numlock关着按倒0也是这样。
-
小锋老师的最后一节课,撒花
-
基础先学到这吧,还是得多敲代码,这几天打字速度倒提升不少,代码也是跟着别人敲的
-
用好API把里边的方法多用用
上一篇: Java中常用的集合工具类
下一篇: 人脸识别经典开源项目