目录
File类的方法
File的遍历
- 找出盘中所有的一级文件对象
- 遍历一级文件对象,判读是否为文件
- if 是文件,判断是否是目标文件
- if 不是,则遍历该文件夹,重复上述过程
public class fileText006 { public static void main(String[] args) { // D:\text\递归遍历\ ScreamFile(new File("D:"), "me.txt"); } public static void ScreamFile(File f, String fileName) {//文件所在的区域,查找的文件名 //输入的file为空,路径错误,为文件夹 // || 有一个为true if (f == null || !f.exists() || f.isFile()) { return; //返回空 } //排除错误后遍历文件夹 File[] files = f.listFiles(); //判断是否存在一级文件,且能拿到一级文件 //&&所有都为true if (files != null&&files.length > 0) { for (File file : files) { //file为文件,直接对比目标文件 if (file.isFile()) { //获取文件名称,并于目标文件对比 if (file.getName().contains(fileName)) { System.out.println("目标文件的路径为" + file.getAbsolutePath()); } } else { //file为文件夹 ScreamFile(file, fileName); } } } } }
用到递归算法,||满足其一即可,&&所有条件都要满足
字符集
编码种类
- ASCII 1个字节,8位
- GBK 2个字节,16位
- UTF-8 汉字占三个字节,英文/数字占一个字节.兼容ASCII编码
java的编码
get Bytes()使用平台默认的编码方式
get Byte(String str)指定编码方式
java的解码
String(byte[] bytes) 使用平台默认的解码方式
String(byte[] bytes,String str) 使用指定的解码方式
java编码,解码实例
public class fileText008 {
public static void main(String[] args) throws Exception {
//编码
String data="糯米香香";
byte[] b = data.getBytes();
//解码
String s = new String(b);
System.out.println(s);
}
}
IO流认识
按流的方向分为:输入流,输出流
按流的单位分为:字节流(所有文件类型),字符流(纯文本文件)
IO总体有四大流:
- 字节输入流---InputStream----FileInputStream
- 字节输出流---OutputStream---FileOutputStream
- 字符输入流---Reader---FileReader
- 字符输出流---Winter---FileWriter
哦,都是抽象类--实现类
文件字节输入流
把磁盘中文件的数据以byte的形式读到内存中
文件的读取方法
创建字节输入流管道与源文件接通
public fileInputStream(File file)
public fileInputStream(String pathName)
读取文件
public int read();每次读取返回一个字节
文件的读取实例
每次读取一个字节
public class ioText {
public static void main(String[] args) throws IOException {
//1.源文件与程序创建字节输入流管道接通,括号内输入源文件路径,类会把路径包装成File
InputStream io = new FileInputStream("src\\bh");//多态,左抽象类,右实现类
// 2.读取字节
// public int read();每次读取一个字节返回
int i = io.read();
System.out.println((char)i);
int i1 = io.read();
System.out.println((char)i1);
int i2 = io.read();
System.out.println((char)i2);
}
}
每次读取多个字节
public class ioText002 {
public static void main(String[] args) throws IOException {
//1.源文件与程序创建字节输入流管道接通,括号内输入源文件路径,类会把路径包装成File
InputStream io = new FileInputStream("src\\bh");//多态,左抽象类,右实现类
// 2.1读取字节
byte[] butten = new byte[3];//桶,一次读取3个字节--编码
// 读取
int len = io.read(butten);
String s = new String(butten);//解码
System.out.println(s);
System.out.println(len);
int len2 = io.read(butten);
// butten=[n2l]
// butten=[hhl]
String s1 = new String(butten,0,len2);//解码--读多少,取多少
System.out.println(s1);
System.out.println(len2);
//2.2循环读取
int len;//统计读取的长度
byte[] b = new byte[3];//一次读取的字节长度
while((len=io.read(b))!=-1){
String s = new String(b,0,len);
System.out.print(s);
System.out.println(len);
}
// 最后一步,释放输入流管道
io.close();
}
}
读取所有字节--可避免乱码
- 法一:获取文件长度,传入字节数组中,获取文件信息
- 法二:用readAllBytes()直接获取,返回值为字节数组
//法一
public class ioText004 {
public static void main(String[] args) throws IOException {
//创建连接
InputStream is = new FileInputStream("src\\bh");
//获取文件长度
File file = new File("src\\bh");
byte[] bytes = new byte[(int) file.length()];//字节数组的长度与文件长度相等
//获取文件字节信息
int len = is.read(bytes);
// 解码
String s = new String(bytes);
System.out.println(s);
System.out.println(len);//获取的文件长度
System.out.println(file.length());//文件长度
}
}
//法二
public class ioText005 {
public static void main(String[] args) throws IOException {
//创建连接
InputStream is = new FileInputStream("src\\bh");
byte[] bytes = is.readAllBytes();
String s = new String(bytes);
System.out.println(s);
}
}
文件字节输出流
构造器--创建输出流
FileOutputStream(String filepath)与源文件路径接通,每次运行会覆盖文档数据
FileOutputStream(String filepath,Boolean append)与源文件路径接通,可追加数据
方法名称--输出字节
write(int a)写一个字节出去
write(byte[] bytes)写一个字节数组出去
write(byte[] bytes ,int pos ,int len)写字节的一部分出去
代码演示
public class ioText006 {
public static void main(String[] args) throws Exception {
//创建文件并连接输入流
OutputStream os = new FileOutputStream("src\\text001.txt",true);
os.write(96);
os.write('b');
byte[] bytes = "嘎嘎嘎嘎".getBytes();
os.write(bytes,0,12);
os.close();//关闭输入流
}
}
字节流应用--文件复制
public class ioText007 {
public static void main(String[] args) throws Exception {
//输入流
InputStream is = new FileInputStream("src\\text001.txt");
//输出流
OutputStream os = new FileOutputStream("src\\text001copy.txt");
// 创建一个字节数组,负责转移字节数据
byte[] bytes = new byte[2];
int len;
while((len = is.read(bytes))!=-1){
//输出字节
os.write(bytes);
}
//释放字节
os.close();
is.close();
}
}
字符输入流
构造器--创建输入流
FileReader(String pathName) 创建字节输入流管道与源文件接通
方法名称
read() 每次读取一个字符,没有数据会返回-1
read(char[] chars)每次读取多个字符
代码实例
通过字符数组来获取数据!!!!!!!
public class ioText008 {
public static void main(String[] args) throws Exception {
//创建输入流
Reader fr = new FileReader("src\\text001.txt");
// 获取文件
// 字符输入流通过字符读,字节输入流通过字节读
char[] chars = new char[3];
while((fr.read(chars))!=-1){
System.out.print(chars);
}
}
}
字符输出流
实现换行"\r\n"
构造器--创建输出流
FileWriter(String filepath) 创建字符输出流管道与源文件接通
FileWriter(String filepath,Boolean append)创建字符输出流管道与源文件接通,可追加数据
方法名称
write(int c) 写一个字符
write(String str) 写一个字符串
write(String str,int off,int len) 写一个字符串的一部分
write(char[] cbuf) 写一个字符数组
write(char[] cbuf,int off,int len) 写一个字符数组的一部分
代码实例
public class ioText009 {
public static void main(String[] args) throws Exception {
//创建输出流
Writer fw = new FileWriter("src/text002.txt");
//传入数据
fw.write(97);//传入int
fw.write('a');//传入字符
fw.write("\r\n");
fw.write("糯米香香",0,1);//传入字符串
//传入字符数组
char[] ch={'我','要','早','睡'};
fw.write(ch);
fw.close();
}
}
关闭流/刷新流
程序执行时,输出的数据会先存到内存中,遇到关闭流/刷新流后才会写入到文件中
flush() 属性流
close() 关闭流,关闭操作,包含刷新