io的常用操作

Posted zywds

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了io的常用操作相关的知识,希望对你有一定的参考价值。

Q1:简单的创建文件

package com.zhangyuwei.io;

import java.io.File;
import java.io.IOException;

public class test1 {
    public static void main(String[] args) throws IOException {
        File file=new File("E:\\io"+File.separator,"file1.txt");
        if(file.exists()){
            System.out.println("文件已经存在");
        }else{
            file.createNewFile();
            System.out.println("文件创建成功!");
        }
    }
}

 

Q2:文件的一些常用操作

package com.zhangyuwei.io;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class test2 {
    public static void main(String[] args) throws IOException {
        File file=new File("E:\\io\\file.txt");
        /*单个文件*/
        //file.createNewFile();
        /*单级文件夹*/
        //file.mkdir();
        /*多级文件夹*/
        //file.mkdirs();
        /*重命名*/
        //file.createNewFile();
        File file1=new File("E:\\io\\file1.txt");
        //file.renameTo(file1);
        /*删除*/
        //file.createNewFile();
        //file.delete();
        /*删除执行完后的*/
        //file.createNewFile();
        //file1.createNewFile();
        //file.deleteOnExit();
        /*判断文件或文件夹是否存在*/
        //file.createNewFile();
        /*if(file.exists()){
            System.out.println("文件存在");
        }*/
        //file.delete();
        /*是一个文件夹吗?*/
        //file.mkdir();
        /*if(file.isDirectory()){
            System.out.println("是一个文件夹");
        }else{
            System.out.println("不是一个文件夹");
        }*/
        /*获得文件或者文件夹的名称*/
        //System.out.println(file.getName());
        /*绝对路径*/
        //file.createNewFile();
        //System.out.println(file.getPath());
        //System.out.println(file.getAbsolutePath());
        /*文件大小是*/
        //System.out.println(file.length());
        /*父路径是*/
        //System.out.println(file.getParent());
        /*最后一次修改的时间是*/
        /*long  lastmodified= file.lastModified();
        Date data = new Date(lastmodified);
        SimpleDateFormat simpledataformat = new SimpleDateFormat("YY年MM月DD日 HH:mm:ss");
        System.out.println("最后一次修改的时间是:"+simpledataformat.format(data));*/

    }
}

 Q3:获取文件或文件夹的方法

package com.zhangyuwei.io;

import java.io.File;

public class test3 {
    public static void main(String[] args) {
        //文件或者文件夹的方法
        File[] file=File.listRoots();
        System.out.println("所有的盘符是:");//盘符就是C:\\   D:\\  E:\\等等
        for(File item:file){
            System.out.println("	"+item);
        }
        File fileName=new File("E:\\");
        String[] name=fileName.list();
        System.out.println("指定文件夹下的文件或者文件夹有:");//包括当前这个文件下的所有文件,不包括子文件
        for (String item:name){//这个获得的是相对路径
            System.out.println("	"+item);
        }
        File[] files=fileName.listFiles();
        System.out.println("获得该路径下的文件或文件夹是:");//这个获得的是绝对路径
        for(File items:files){
            System.out.println("	"+items);
        }
    }
}

 

 Q4:递归获得所有文件与文件夹

package com.zhangyuwei.io;

import java.io.File;

public class test4 {
    public static void main(String[] args) {
        //递归获得所有文件与文件夹
        File file=new File("E:"+File.separator+"s3s143twoclass"+File.separator+"Idea");
        ListFile(file);
    }
    public static void ListFile(File file01){
        if(file01.isDirectory()){
            File[] files=file01.listFiles();
            for(File item:files){
                System.out.println(item);
                ListFile(item);
            }
        }
    }
}

 

Q5:字节流与字符流

1.字节流与字符流的区别:

  • 读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读多个字节。
  • 处理对象不同:字节流能处理所有类型的数据(如图片、avi等),而字符流只能处理字符类型的数据。
  • 结论:只要是处理纯文本数据,就优先考虑使用字符流。 除此之外都使用字节流。

 2:输出字节流OutputStream(OutputStream 是所有的输出字节流的父类,它是一个抽象类。)

package com.zhangyuwei.io;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

public class test5 {
    public static void main(String[] args) throws IOException {
        //输出字节流OutputStream
        // 第1步:使用File类找到一个文件
        File file=new File("E:"+File.separator+"io"+File.separator+"file.txt");
        if(file.exists()){
            System.out.println("文件存在");
        }else{
            file.createNewFile();
        }
        //第2步:通过子类实例化父类对象
        OutputStream outputStream=new FileOutputStream(file);//// 通过对象多态性,进行实例化
        // 第3步:进行写操作
        String str="Hello Word!";// 准备一个字符串
        byte[] b=str.getBytes();// 只能输出byte数组,所以将字符串变为byte数组
        outputStream.write(b);//将内容输出,保存文件
        //第4步,关闭输出流
        outputStream.close();
    }
}

 

3:字节输入流InputStream(是所有的输入字节流的父类,它是一个抽象类。)

package com.zhangyuwei.io;

import java.io.*;

public class test6 {
    public static void main(String[] args) throws IOException {
        //字节输入流inputStream
        // 第1步:使用File类找到一个文件
        File file=new File("E:"+File.separator+"io"+File.separator+"file.txt");
        // 第2步:通过子类实例化父类对象
        InputStream inputStream=new FileInputStream(file);// 通过对象多态性进行实例化
        // 第3步:进行读操作
        byte[] b=new byte[1024];// 所有的内容读到此数组中
        inputStream.read(b);// 把内容从文件中取出,内容读到byte数组中
        // 第4步:关闭输入流
        inputStream.close();
        System.out.println("内容为:"+new String(b));//将byte变成字符串输出
    }
}

 

内容已经被读取进来,但是发现后面有很多空格,这是应为开辟的byte数组大小为1024,而实际内容并没有1024个字节,也就是说存在很多个空白的空间这样操作显然不合理.

如果想要解决以上问题,这是你就需要观察read方法,它是有返回值的,次返回值表示向数组写入了多少个数据

改进代码如下:

技术分享图片
package com.zhangyuwei.io;

import java.io.*;

public class test6 {
    public static void main(String[] args) throws IOException {
        //字节输入流inputStream
        // 第1步:使用File类找到一个文件
        File file=new File("E:"+File.separator+"io"+File.separator+"file.txt");
        // 第2步:通过子类实例化父类对象
        InputStream inputStream=new FileInputStream(file);// 通过对象多态性进行实例化
        // 第3步:进行读操作
        byte[] b=new byte[1024];// 所有的内容读到此数组中
        int len=inputStream.read(b);// 把内容从文件中取出,内容读到byte数组中
        // 第4步:关闭输入流
        inputStream.close();
        System.out.println("读取数据的长度:"+len);
        System.out.println("内容为:"+new String(b,0,len));//将byte变成字符串输出
    }
}
View Code

 

 此时,再次运行程序,发现没有多余的空格产生,这是因为程序最后只是把byte数组指定范围中的内容变成了字符串,注意:注意输入文件的路径,在使用FileInputStream读取时如果指定

路径不存在,则程序会出现异常。

以上问题是否还有其他办法解决呢?当然是有的,虽最后指定了byte数组的范围,但是程序依然开辟了很多无用的空间,这样肯定会造成资源的浪费,那么此时能否根据文件数据量来开辟?

想完成这样的操作,则要从File类着手,因为在File类中存在着一个length()方法,此方法可以取得文件的大小,来开辟指定大小的byte数组.

技术分享图片
package com.zhangyuwei.io;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

public class test7 {
    public static void main(String[] args) throws IOException {
        //字节输入流inputStream
        // 第1步:使用File类找到一个文件
        File file=new File("E:"+File.separator+"io"+File.separator+"file.txt");
        // 第2步:通过子类实例化父类对象
        InputStream inputStream=new FileInputStream(file);// 通过对象多态性进行实例化
        // 第3步:进行读操作
        byte[] b=new byte[(int)file.length()];// 所有的内容读到此数组中
        inputStream.read(b);// 把内容从文件中取出,内容读到byte数组中
        // 第4步:关闭输入流
        inputStream.close();
        System.out.println("内容为:"+new String(b));//将byte变成字符串输出
    }
}
View Code

 

 除上面方法外,也可以通过循环从文件中一个一个内容读取出来,直接使用read()方法即可

技术分享图片
package com.zhangyuwei.io;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

public class test8 {
    public static void main(String[] args) throws IOException {
        //字节输入流inputStream
        // 第1步:使用File类找到一个文件
        File file=new File("E:"+File.separator+"io"+File.separator+"file.txt");
        // 第2步:通过子类实例化父类对象
        InputStream inputStream=new FileInputStream(file);// 通过对象多态性进行实例化
        // 第3步:进行读操作
        byte[] b=new byte[(int)file.length()];// 所有的内容读到此数组中
        for(int i=0;i<b.length;i++){
            b[i]=(byte)inputStream.read();//将内容读出
        }
        // 第4步:关闭输入流
        inputStream.close();
        System.out.println("内容为:"+new String(b));//将byte变成字符串输出
    }
}
View Code

 

总结:以上便是方法的一些改进,无论是哪个总有它的用处,最好呢,都掌握,因为随着开发的需要,有可能都使用到.

Q6:简单的动态页面静态化

package com.zhangyuwei.io;

import java.io.*;
import java.util.UUID;

public class test9 {
    public static void main(String[] args) throws IOException {
        //生成新闻页
        File file05 = new File("e:" + File.separator +"io"+File.separator+"index.html");
        OutputStream os=new FileOutputStream(file05);
        StringBuffer strb=new StringBuffer();
        strb.append("<ul>");
        for (int i = 0; i <10; i++) {
            File file=new File("e:"+File.separator+"io"+File.separator+"news0"+i+".html");
            OutputStream os2=new FileOutputStream(file);
            String val=UUID.randomUUID().toString();
            os2.write(val.getBytes());
            os2.close();
            strb.append("<li>");
            strb.append("<a href=‘news0"+i+".html‘ >"+UUID.randomUUID()+"</a>");
            strb.append("</li>");
        }
        strb.append("</ul>");
        String news=strb.toString();
        os.write(news.getBytes());
        os.close();
    }
}

  结果:

技术分享图片

 

以上是关于io的常用操作的主要内容,如果未能解决你的问题,请参考以下文章

提效小技巧——记录那些不常用的代码片段

VSCode自定义代码片段——git命令操作一个完整流程

C#程序员经常用到的10个实用代码片段 - 操作系统

常用python日期日志获取内容循环的代码片段

C#常用代码片段备忘

swift常用代码片段