2021-06-21
程序员文章站
2022-04-27 18:50:42
...
关于io流的一些知识1
IO流是什么?
1.可以将数据从本地文件中读取出来
2.可以将数据保存到本地文件中
一.File类
1.在读写的时候需要传入文件地址值
2.可以对文件\文件夹的增删查等
File file = new File("里面的地址值可以是字符串对象也可以直接填入地址值");
//1.相对路径指:相对于当前代码项目下的文件或文件夹路径
File file = new file("a.txt");//和模块平级的文件
//2.绝对路径指:相对磁盘中的文件夹或文件的路径;
File file = new file("D\\test.txt");//表示D盘下面的文件
3.File的方法
(1.)创建
//creatNewFile() 创建新的空文件
//如果文件存在返回false,如果不存在创建成功后返回true
File file = new File("D\\test.txt");
file.creatNewFile();
//mkdir() 创建一个单级文件夹 如创建多级文件夹便为false
File file = new File("D\\test");
file.mkdir();
//mkdirs() 创建一个多级文件夹 常用些
File file = new File("D\\test\\demo");
file.mkdirs();
//File删除方法
File file = new File("D\\test\\demo")
file.delete();
//删除不走回收站
//注意点1.可以删除文件夹
//注意点2.只能删除空的文件夹,如果不是空只能进入文件夹里进行删除
//File判断和获取功能
file.isDirectory()//判断路径名表示的是否为文件夹
file.isFile()//判断路径名表示的是否为文件
file.exists()//判断路径名表示的是否存在
file.getName()//返回路径名表示的文件全称或文件夹名称
file.listFiles()
//调用者为文件或不存在时返回null
//空文件夹返回0,有内容的文件夹便返回里面的文件和文件夹路径以数组形式
针对性练习1
//代码练习--删除多级文件夹
void delete(File file){
File file = new File("地址值");
//利用递归删除多级文件夹
File[] files = file.listFiles();
//获取数组内每个元素
for(File file :files){//空文件夹被调用不执行循环,本身就是0
if(!file.isFile){ //如果不是文件 那就是文件夹
delets(file);
}else{
file.delete();//文件直接删除就好了
}
}
//执行到这里就是空文件夹了
files.delete();
}
针对性练习2
//代码练习 统计一个文件夹中的每种文件所出现的次数
File file = new File("文件夹地址");
void count(File file,HashMap hm){
HashMap hm = new HashMap();
File []files = file.listFiles();
for(File file:files){
if(file.isfile){
String name = file.getname();
String namearr name.spilt("\\.");
if(namearr.length==2){
String name1 = namearr[1];
if(hm.containsKey(name1)){
//如果已经存在在集合中 那么对应的value值+1
Inter inter = hm.get(name1);
int = num = inter+1;
//value值会被覆盖
hm.put(name1,num);
}else{
//不存在 直接添加
hm.put(name1,1);
}
}
}else{
count(file,hm)
}
}
}
二.字节流
new FileOutputStream(File file);
new FileOutputStream(String name);
new FileOutputStream(String name);
/*可以在里面在new一个file对象的地址值也可以
直接放入字符串对象或者字符串,此方法源码会判断
是不是file类型,如果不是方法会转换file类型*/
FileOutputStream fos = new FileOutputStream("地址值");
//写数据到文件中 传入数字或byte[]
byte[] bys = "123321".getBtyes();
fos.write(bys);
fos.close(); //关流
try{
//可能出现异常的代码;
}catch(异常类名 对象名){
//对异常对象的处理代码;
}finally{
//执行所有清除操作;
//finally语句块中的代码除非JVM结束运行,否则一定会执行
}
FileOutputStream fos = null;//提升fos的作用域
try {
fos = new FileOutputStream("模块名\\aaa.txt");
fos.write("hello".getBytes());
} catch (IOException e) {
e.printStackTrace();
} finally {
if(fos != null) {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
//利用字节流读写数据
FileInputStream fis =new FileInputStream("地址值")
FileOutputStream fos = new FileOutputStream("地址");
int by ;
while((by = fis.read)()!=-1){
//一次读取一个字节,利用循环读取多个字节
fos.write(by);
//读写数据(一次读取一个字节数组,一次写入一个字节数组)
byte[] bys = new byte[1024];
int len;//定义变量记录当次读取的有效字节个数
while ((len=fis.read(bys))!=-1) {
//1.如果读取到的结果返回的是-1,表示读取到文件末尾
//2.如果返回值不是-1,表示当前读取到的有效字节个数
fos.write(bys,0,len);//写出当次读取的有效字节个数
}
//释放资源
fos.close();
fis.close();
}
三.字节缓冲流
//字节缓冲输出流:BufferedOutputStream(OutputStream out)
BufferedOutputStream bos = new BufferedOutputStream (new FileOutputStream("地址值"));
//字节缓冲输入流:BufferedInputStream(InputStream in)
BufferedInputStream bis = new BufferedInputStream (new FileInputStream("地址值"));
//一次读取一个字节数据
int by;
while ((by=bis.read())!=-1) {
System.out.print((char)by);
}
//释放资源
bis.close();
编码和解码
在电脑文件中存储一个字符现在码表中找到对应数字并转换成二进制进行存储;读取时就会先行解析成二进制再转成97,再次通过查找对应代表的字符等等;以上操作中将字符转换成二进制的称之为编码反之通过二进制解析出来的变为解码;
编码:getBytes(Strinf)方法存储到一个新的字节数组中
解码:String(Byte[]bytes)构造新的String
//字符流写数据
//路径要保证父级路径存在,文件可以被创建
//如果文件存在会清空文件 可以加上续写开关,路径后面+true
FileWrite fw = new FileWrite("路径",true);
fw.write(96);//数字
char chars = {12,34,56,78,01};
fw.write(chars);//字符数组
fw.write(chars,0,3);//字符数组0开始,写三个
fw.write("\r\n");//回车换行符
fw.write("字符串");
fw.flush();//刷新流
fw.close();//释放资源
FileRader fw = new FileRader("路径");
//字符缓冲流
BufferedWrite bfw = new BufferedWrite(new FileWrite("路径",true));
BufferedRader bfr = new BufferedRader(new FileRader("路径",true));
//两个特有的方法
bfw.newline; //回车换行 相当与"\r\n"
bfw.readLine;//读取一整行数据
//缓冲流小联系 读取文件中的数据并排序;随之再写入本地
BufferedRader bfr = new BufferedRader(new FileRader("路径"));
//读进来
String line = bfr.readLine;
bfr.close
//进行排序
String spilt = line.spilt("切割");
int [] arr = new int[spile.length];
//类型转换
for(int i = 0;i<arr.length;i++){
arr [i] = Interger.parseInt(spilt[i]);
}
//排序
Arrays.sort(arr);
bfr.close;
//写回本地
BufferedWrite bfw = new BufferedWrite(new FileWrite("路径",true));
bfw.newLine;
int i = 0 ;
while(i<arr.length){bfw.write(arr[i]);i++}
推荐阅读