【JavaSE】过滤器、IO流
引言
- 沉默的人往往有很大的梦;
- 明知不可为,偏要为之;
知识点总结
过滤器
File类中有两种过滤器接口:
1.public interface FileFilter
需要实现的方法为
boolean accept(File pathname)
测试指定的抽象路径名是否应包含在路径名列表中。
2.public interface FilenameFilter
需要实现的方法为
boolean accept(File dir, String name)
测试指定文件是否应包含在文件列表中。
实现FileFilter接口过滤器,FilenameFilter与之用法相似,只是参数不同;
FilterImpl是自定义的FileFilter的实现类,实现accept()方法;
===========================
private static void getAllfiles2(File file1) {
File[] arr=file1.listFiles(new FilterImpl());
for (int i = 0; i < arr.length; i++) {
if(arr[i].isDirectory())
getAllfiles2(arr[i]);
else {
System.out.println(arr[i]);
}
}
}
===========================
匿名内部类的方式实现
-----------------
private static void getAllfiles3(File file1) {
File[] arr=file1.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
return pathname.isDirectory()||pathname.getName().endsWith(".txt");
}
});
for (int i = 0; i < arr.length; i++) {
if(arr[i].isDirectory())
getAllfiles2(arr[i]);
else {
System.out.println(arr[i]);
}
}
}
===========================
Lambda表达式实现
-----------------
private static void getAllfiles3(File file1) {
File[] arr=file1.listFiles((pathname) -> pathname.isDirectory()||pathname.getName().endsWith(".txt"));
for (int i = 0; i < arr.length; i++) {
if(arr[i].isDirectory())
getAllfiles2(arr[i]);
else {
System.out.println(arr[i]);
}
}
}
IO流
Input Output流,也叫输入输出流;按传输数据的不同可分为字节流和字符流。
字节流
字节流中的读入读出方法分别为InputStream,OutputStream;
注意(我自己老是弄错)
Input是指从硬盘文件中读取数据;
Output是指写入数据到硬盘文件;
OutputStream
OutputStream中有以下方法,其子类皆可使用;
写入数据的原理
java程序->JVM->OS(操作系统)->OS调用写数据的方法->把数据写入到文件中;
字节输出流的使用步骤
1.创建OutputStream对象;
2.用write方法写数据;
3.关闭资源(.close());
常用方法
-
void close()
关闭此输出流并释放与此流相关联的任何系统资源。 -
void flush()
刷新此输出流并强制任何缓冲的输出字节被写出。 -
void write(byte[] b)
将 b.length字节从指定的字节数组写入此输出流。 -
void write(byte[] b, int off, int len)
从指定的字节数组写入 len个字节,从偏移 off开始输出到此输出流。 -
abstract void write(int b)
将指定的字节写入此输出流。
其子类有:
- ByteArrayOutputStream ,
- FileOutputStream
- FilterOutputStream
- ObjectOutputStream
- OutputStream
- PipedOutputStream
以FileOutputStream为例来讲述
构造方法
1.FileOutputStream(String name)
创建文件输出流以指定的名称写入文件。
2.FileOutputStream(File file)
创建文件输出流以写入由指定的 File对象表示的文件。
3.FileOutputStream(File file, boolean append)
创建文件输出流以写入由指定的 File对象表示的文件;append表示是否追加数据(续写);
public class Demo01FileOut {
public static void main(String[] args) throws IOException {
FileOutputStream fou1=new FileOutputStream("C:\\Users\\Administrator\\Desktop\\Demo01.txt");
File f1=new File("C:\\Users\\Administrator\\Desktop\\Demo01.txt");
FileOutputStream fou2=new FileOutputStream(f1);
fou1.write(12);
byte[] b={-61,62,68,93,94};
fou1.write(b);
fou1.write(b,2,3);
fou1.close();
}
}
InputStream
读取数据的原理
Java程序->JVM->OS->硬盘文件;
常见方法
- int available()
返回从该输入流中可以读取(或跳过)的字节数的估计值,而不会被下一次调用此输入流的方法阻塞。 - void close()
关闭此输入流并释放与流相关联的任何系统资源。 - void mark(int readlimit)
标记此输入流中的当前位置。 - boolean markSupported()
测试这个输入流是否支持 mark和 reset方法。 - abstract int read()
从输入流读取数据的下一个字节。 - int read(byte[] b)
从输入流读取一些字节数,并将它们存储到缓冲区 b 。 - int read(byte[] b, int off, int len)
从输入流读取最多 len字节的数据到一个字节数组。 - long skip(long n)
跳过并丢弃来自此输入流的 n字节数据。
import java.io.FileInputStream;
import java.io.IOException;
public class Demo02FileInput {
public static void main(String[] args) throws IOException {
FileInputStream fis1=new FileInputStream("C:\\Users\\Administrator\\Desktop\\Demo02.txt");
//
System.out.println(fis1.read());
System.out.println("=======================");
byte[] bt1=new byte[5];
fis1.read(bt1);
for (int i = 0; i < bt1.length; i++) {
System.out.println(bt1[i]);
}
System.out.println("=======================");
fis1.skip(2);
while (fis1.read()!=-1)
System.out.println(fis1.read());
fis1.close();
}
}
字符流
Reader
子类有:
- IutputStreamReader
FileReader构造方法
1.FileReader(File file)
创建一个新的 FileReader ,给出 File读取。
2.FileReader(String fileName)
创建一个新的 FileReader ,给定要读取的文件的名称。
FileReader常见方法
1. int read()
读一个字符
2.int read(char[] cbuf)
将字符读入数组。
3.abstract int read(char[] cbuf, int off, int len)
将字符读入数组的一部分。
4. int read(CharBuffer target)
尝试将字符读入指定的字符缓冲区。
5. boolean ready()
告诉这个流是否准备好被读取。
public class Demo01FileReader {
public static void main(String[] args) throws IOException {
FileReader fr1=new FileReader("C:\\Users\\Administrator\\Desktop\\Demo01.txt");
int len=0;
while((len=fr1.read())!=-1)
System.out.print((char)len);
//单个字符读取
char[] bt1=new char[100];
while((len=fr1.read(bt1))!=-1){
System.out.print(new String(bt1,0,len));
//以字符串的形式输出读取到的字符数组
}
}
}
Writer
字符输出流的使用步骤:
1.创建FileWriter对象;
2.把用writer()方法,把数据写入到内存缓冲区中;
3.用flush()方法,把内存缓存区中数据刷新到文件中;
4.刷新内存缓冲区并关闭输出流;
FileWriter
它的继承关系为:
FileWriter extends OutputStreamWriter extends Writer
构造方法
- FileWriter(File file)
给一个File对象构造一个FileWriter对象。 - FileWriter(String fileName)
构造一个给定文件名的FileWriter对象。 - FileWriter(String fileName, boolean append)
构造一个FileWriter对象,给出一个带有布尔值的文件名,表示是否附加写入的数据。
常用方法
1.Writer append(char c)
将指定的字符附加到此作者。
2.Writer append(CharSequence csq)
将指定的字符序列附加到此作者。
3.Writer append(CharSequence csq, int start, int end)
将指定字符序列的子序列附加到此作者。
4.abstract void close()
关闭流,先刷新。
5.abstract void flush()
刷新流。
6.void write(char[] cbuf)
写入一个字符数组。
7.abstract void write(char[] cbuf, int off, int len)
写入字符数组的一部分。
8.void write(int c)
写一个字符
9.void write(String str)
写一个字符串
10.void write(String str, int off, int len)
写一个字符串的一部分。
public class Demo02FileWriter {
public static void main(String[] args) throws IOException {
FileWriter fw1=new FileWriter("d.txt");
fw1.write("aa");
char[] arr= {'2','4','6','高'};
fw1.write(arr);
fw1.write("\r\n");//换行
fw1.append("小爱同学");
fw1.flush();
fw1.close();
}
}
本文地址:https://blog.csdn.net/alpha_xia/article/details/107442942
上一篇: golang的命令行程序开发
下一篇: vue前后端分离开发解决跨域的问题