java文件IO操作

1、File类

构造方法	
public File(String pathname)	//根据文件路径创建文件对象
public File(String parent,String child)	//根据父路径名字符串和子路径字符串创建文件对象
public File(File parent,String child)	//根据父路径对应的文件对象和子路径名字符串创建文件对象

// 常用方法
public boolean isDirectory()	//判断此路径名表示的file是否为文件夹
public boolean isFile()	//判断此路径名表示的File是否为文件
public boolean exists()	//判断此路径表示的File是否存在

public static File[] listRoots() //获取所有盘符
public long length()	//返回文件的大小
public String getAbsolutePath()	//返回文件的绝对路径
public String getPath()	//返回定义文件时使用的路径
public String getName()	//返回文件名
public long lastModified()	//返回文件最后修改时间

public boolean createNewFile()	//创建一个新的空的文件夹
public boolean mkdir()	//创建单级文件夹
public boolean mkdirs()	//创建多级文件夹
public boolean delete()	//删除空文件夹

public File[] listFiles()	//获取当前路径下所有内容

例子:

public class FileDemo {
    public static void main(String[] args) throws IOException {
        // 使用相对路劲创建文件对象
        File f = new File("D:\\kk");
        f.mkdirs();//创建不存在的路劲(目录)
        f=new File(f,"a.txt"); // 重新构造file
        boolean isnew = f.createNewFile();// 创建空文件,文件存在返回false,不存在创建成功返回true

        System.out.println("是不是文件"+f.isFile());
        System.out.println("是不是文件夹"+f.isDirectory());
        System.out.println("是否存在"+f.exists());

        System.out.println("文件的大小"+f.length());
        System.out.println("文件的绝对路劲"+f.getAbsolutePath());
        System.out.println("文件的创建路劲"+f.getPath());
        System.out.println("文件的最后修改时间"+new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(f.lastModified()));
        System.out.println("文件名"+f.getName());

        System.out.println("文件是否删除成功"+f.delete());//删除文件和空文件夹
        f.createNewFile();// 删除后重新创建文件
        // 获取D盘的所有资源
        File f2 = new File("D://");
        File[] files = f2.listFiles();
        for (File file : files) {
            System.out.println(file);
        }
        // 获取所有盘符名称
        File[] listRoot = File.listRoots();
        for (File root : listRoot) {
            System.out.println(root);
        }
    }
}

2、IO流

2.1 字节流

2.1.1 输入流

(1) 字节输入流: FileInputStream:
// 创建一个字节输入流对象,文件路劲必须存在
FileInputStream fis = new FileInputStream("test.txt");
// 读取一个字节数据
int c = fis.read();
System.out.println((char) c);
//指针不会返回
fis= new FileInputStream("test.txt");
// 读取一个字节数组数据
byte[] bytes = new byte[1024];
int len = fis.read(bytes);
for (int i = 0; i < len; i++) {
    System.out.print((char) bytes[i]);
}
fis= new FileInputStream("test.txt");
// 一直读取数据,直到数据读取完毕
int b;
while ((b=fis.read())!=-1){
      System.out.print((char) b);
}
// 关闭输出流,相当于windows点击右上角的x
fis.close();
(2) 字节缓冲输入流(自带8192缓冲区):BufferedInputStream
    public static void main(String[] args) throws IOException {
        // 字节缓冲输入流
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream("test.txt"));
        // 字节缓冲输入流
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("test2.txt"));
        byte[] bytes = new byte[1024];
        int len;
        // 通过字节数组读取
        while ((len=bis.read(bytes))!=-1){
            // 通过字节数组写出
            bos.write(bytes,0,len);
        }
    }
(3) 数据输入:
    public static void main(String[] args) throws IOException {
            FileInputStream fileInputStream = new FileInputStream("text.txt");
            DataInputStream dataInputStream = new DataInputStream(fileInputStream);
			// 需要先写出数据使用DataOutputStream
            // 读取整数
            int intValue = dataInputStream.readInt();
            System.out.println("整数值:" + intValue);

            // 读取浮点数
            double doubleValue = dataInputStream.readDouble();
            System.out.println("浮点数值:" + doubleValue);

            // 读取字符串
            String stringValue = dataInputStream.readUTF();
            System.out.println("字符串值:" + stringValue);

            dataInputStream.close();
    }

2.1.2 输出流

(1) 字节输出流: FileOutputStream:
 // 创建字节输出流对象,如果文件不存在会创建新的文件,需要父路劲存在,
 //如果父路劲不存在可以使用file对象创建,默认会清空文件,从头开始写,true为续写,默认为false
FileOutputStream fos = new FileOutputStream("test.txt",true);
// 写出数据
fos.write('a');
// 关闭输出流,相当于windows点击右上角的x
fos.close();
(2) 字节缓冲输出流:BufferedOutputStream
    public static void main(String[] args) throws IOException {
        // 字节缓冲输入流
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream("test.txt"));
        // 字节缓冲输入流
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("test2.txt"));
        byte[] bytes = new byte[1024];
        int len;
        // 通过字节数组读取
        while ((len=bis.read(bytes))!=-1){
            // 通过字节数组写出
            bos.write(bytes,0,len);
        }
    }
(3) 数据输出:
    public static void main(String[] args) throws IOException {
            FileOutputStream fileOutputStream = new FileOutputStream("text.txt");
            DataOutputStream dataOutputStream = new DataOutputStream(fileOutputStream);

            // 写入整数
            int intValue = 10;
            dataOutputStream.writeInt(intValue);

            // 写入浮点数
            double doubleValue = 3.14;
            dataOutputStream.writeDouble(doubleValue);

            // 写入字符串
            String stringValue = "Hello DataOutputStream!";
            dataOutputStream.writeUTF(stringValue);

            dataOutputStream.close();
    }

2.2 字符流

字符流 = 字节流+字符集
字节流一次读取一个字节,字符流会根据字符集,一次读取一个或多个字节

2.2.1Reader

(1) 字符输入流: FileReader:
    public static void main(String[] args) throws IOException {
    	// 通过字符串路劲创建,字符输入流,指定编码
        FileReader fr = new FileReader("test.txt",Charset.forName("UTF-8"));
        //一次读取一个字符
        int c = fr.read();
        System.out.println((char) c);
        // 一次读取一个字符数组
        char [] cs = new char[10];
        int len;
        while ((len = fr.read(cs))!=-1){
            for (int i = 0; i < len; i++) {
                System.out.print((char) cs[i]);
            }
        }
        fw.close();
        }
(2) 字符缓冲输入流:BufferedReader

常用方法: readLine() 读取一行数据

BufferedReader br =  new BufferedReader(new FileReader("test.txt"));
// 一次读取一行数据,读完返回null
String line = br.readLine();
System.out.println(line);
br.close();

2.2.2Writer

(1)字符输出流: FileWriter:
public static void main(String[] args) throws IOException {
        FileWriter fw = new FileWriter("test.txt",Charset.forName("UTF-8"));
        // 一次写出一个字符
        fw.write('你');
        // 一次写出一个字符数组
        fw.write(new char[]{'你','好','你','好'});
        fw.close();
    }
(2) 字符缓冲输出流:BufferedWriter

常用方法: newLine() 换行

BufferedWriter bw =  new BufferedWriter(new FileWriter("test2.txt"));
// 跨平台换行,不分系统
bw.newLine();
// 一次写入一个字符串
bw.write(line);
bw.close();

2.3 转换流

2.3.1 InputStreamReader

// 将字节输入流转换为字符输入流
FileInputStream fis = new FileInputStream("test.txt");
InputStreamReader isr = new InputStreamReader(fis,"UTF-8");
BufferedReader br = new BufferedReader(isr);
br.close();

2.3.2 OutputStreamWriter

// 
FileOutputStream fos = new FileOutputStream("text2.txt");
OutputStreamWriter osw = new OutputStreamWriter(fos,"UTF-8");
BufferedWriter bw = new BufferedWriter(osw);
bw.close();

2.4 对象流

对象版本号属性(防止修改对象版本号变化,导致读取对象出错):

private static final long serialVersionUID=100000L;

瞬态关键字:transient

// 不会把describe序列化到本地
prvate transient String describe;

2.4.1 序列化流:ObjectOutputStream

将对象写入到本地文件中:

// 需要实现Serializable标记接口,才可序列化
student stu1 = new student("zhangsan", 23);
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("text2.txt"));
oos.writeObject(stu1);
oos.close();

2.4.2 反序列化流ObjectInputStream

将对象读入到程序中:

ObjectInputStream ois = new ObjectInputStream(new FileInputStream("text2.txt"));
student o = (student)ois.readObject();
System.out.println(o);

2.5 打印流

2.5.1 字节打印流:PrintStream

 PrintStream ps = new PrintStream(new FileOutputStream("text.txt"),true,"UTF-8");
        ps.println(100);
        ps.print(101);
        ps.write(88);
        ps.close();

2.5.2 字符打印流

···java
PrintWriter pw = new PrintWriter(new FileWriter(“text.txt”),true);
pw.print(“你好你好”);
pw.println(“明天会更好”);
pw.close();
···
输出语句:System.out.println();
System.out => 获取到指向控制台的打印流
println() => 打印流方法
System.in => 获取从控制台接收用户的输入的标准流

PrintStream p = System.out;
p.println();

2.5 解压缩流

2.5.1 解压流: ZipInputStream

File f = new File("D:\\test.zip");
// 获取压缩中的文件
ZipInputStream zip = new ZipInputStream(new FileInputStream(f));
// 获取压缩包中的文件对象,获取完后返回null
ZipEntry zipEntry = zip.getNextEntry();
System.out.println(zipEntry);

2.5.2 压缩流:ZipOutputStream

File f = new File("D:\\test.txt");
ZipOutputStream zo = new ZipOutputStream(new FileOutputStream(new File("D:\\",f.getName().split("\\.")[0]+".zip")));
// 创建一个压缩文件对象
ZipEntry entry = new ZipEntry(f.getName());
// 将压缩文件对象,添加到压缩包中
zo.putNextEntry(entry);
FileInputStream fis = new FileInputStream(f);
int b;
while ((b=fis.read())!=-1){
    zo.write(b);
}
zo.closeEntry();
zo.close();
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值