概述
- 输入流读取数据,输出流写入数据
- 基本输入输出流为InputStream和OutputStream,他们的子类产生的目的时为了向不同的介质中读写数据。如FileInputStream和FileOutputStream是向文件中写入数据,ByteArrayInputStream和ByteArrayOutputStream是向字节数组中写入数据
- 过滤器有两个版本,过滤器流及阅读器和书写器。
- 过滤器流可以串联到输入流或者输出流上,用于加密、修改转换数据等作用
- 阅读器和书写器可以串联到输入流和输出流上面,允许程序读写文本(字符)而不是字节
- 字符流本质其实就是基于字节流读取时,去查了指定的码表
基础读写
package javaio;
import java.io.*;
public class CreateNewFile {
public static void main(String[] args) {
String dirPath = "F:" + File.separator + "hello";
String filePath = dirPath + File.separator + "test.txt"; //文件夹不创建,无法创建文件
//创建文件夹
File dir = new File(dirPath);
if (dir.exists())
System.out.println("已存在该文件夹,删除中:"+dir.delete());
else System.out.println("正在创建该文件夹:"+dir.mkdir());
//创建文件
File file = new File(filePath);
try {
System.out.println(File.separator); //系统目录中的间隔符
System.out.println(File.pathSeparator);//路径分隔符
if (file.exists())
System.out.println("已存在该文件,删除中:"+file.delete());
else System.out.println("此文件不存在!");
System.out.println("正在创建该文件:"+file.createNewFile());
} catch (IOException e) {
e.printStackTrace();
}
//写入文件
try {
OutputStream out = new FileOutputStream(filePath);
String str = "AB";
out.write(str.getBytes());
OutputStream append = new FileOutputStream(filePath,true);//可以追加append
append.write("你好".getBytes());
out.close();
append.close();
System.out.println("文件的长度:"+file.length());//可以用来创建读取时的数组大小,节省空间
} catch (FileNotFoundException e) {
e.printStackTrace();
System.out.println("文件未找到!");
} catch (IOException e) {
e.printStackTrace();
}
//读取文件
try {
InputStream in = new FileInputStream(filePath);
try {
//怎么读取单个然后转成字符
byte[] b=new byte[1024];
int len = in.read(b);
System.out.println("读取的文件长度:"+len);
System.out.println(new String(b,0,len));
System.out.println(in.read()); //读到末尾会返回-1,可以利用这个特性设计循环逐个读
in.close();
} catch (IOException e) {
e.printStackTrace();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
System.out.println("文件未找到!");
}
}
}
目录列表器
package javaio;
import java.io.File;
import java.io.FilenameFilter;
import java.util.Arrays;
import java.util.regex.Pattern;
public class DirList {
public static void main(String[] args) {
File path = new File(".");
String[] list;
if (args.length == 0) {
list=path.list(); //无参数获取File对象包含的全部列表
}else
list= path.list(new DirFilter(args[0])); //带有一个参数过滤器,将符合条件的过滤出来
Arrays.sort(list, String.CASE_INSENSITIVE_ORDER);
for (String dirItem : list) {
System.out.println(dirItem);
}
}
}
class DirFilter implements FilenameFilter {
private Pattern pattern;
public DirFilter(String regex) {
this.pattern = Pattern.compile(regex);
}
@Override
public boolean accept(File dir, String name) {
return pattern.matcher(name).matches();
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。