IO

1.File类

File类简介

  在 Java 中,File 类是 java.io 包中唯一代表磁盘文件本身的对象。File 类定义了一些与平台无关的方法来操作文件,File类主要用来获取或处理与磁盘文件相关的信息,像文件名、 文件路径、访问权限和修改日期等,还可以浏览子目录层次结构。

  File 类表示处理文件和文件系统的相关信息。也就是说,File 类不具有从文件读取信息和向文件写入信息的功能,它仅描述文件本身的属性。

File类的相关方法

1、构造方法

File(File parent,String child):以父抽象路径名和子路径名字符串创建新的File实例。

File(String pathName):给定路径名字符串转换为抽象路径名来创建新的File实例。

File(String parent,String child):以父路径和子路径名字符串创建新的File实例。

File(URI uri):将给定的 file: URI转换为抽象路径名来创建新的 File实例。

  1. 常用方法:

 

方法

作用

boolean exists()

判断抽象路径代表的文件或目录是否存在

boolean createNewFile()

创建一个文件,当且仅当具该名称的文件不存在时

File[] mkdir()

创建抽象路径名表示的目录中,当且仅当父抽象路径的目录全部存在时才能创建成功

File[] mkdirs()

创建抽象路径名表示的目录中,会一次性创建抽象路径中所有的目录,假如某些目录不存在时

boolean isFile()

判断抽象路径是否为普通文件

boolean isDirectory()

判断抽象路径是否为目录

boolean delete()

删除此抽象路径代表的文件或者路径,只有当前文件夹下没有文件的情况才能删除

File[] listFile()

抽象路径名表示的目录中的文件

String getName()

返回由此抽象路径名表示的文件或目录的名称

String getParent()

抽象路径名的父的路径名字符串,如果此路径名未命名为父目录,则返回null

String getAbsolutePath()

返回此抽象路径名的绝对路径名字符串

String[] list(FilenameFilter filter)

抽象路径名表示的目录中满足指定过滤器的文件和目录

 

删除文件(文件夹)

public static void deleteAllFile(String st){

File f = new File(st);

if(!f.exists())

return;

 

if(f.isFile())

f.delete();

 

deleteDic( f);

}

 

 

public static void deleteDic(File f ){

File[] listFiles = f.listFiles();

if(listFiles != null && listFiles.length > 0){

for (File file : listFiles) {

if(file.isFile()){

file.delete();

}else{

deleteDic(file);

}

}

f.delete();

}

}

 

public static void main(String[] args) throws IOException {

deleteAllFile("D:\FILE");

}

2.IO简要介绍

JAVAio相关的类都在java.io包下

输入流:都是抽象类InputStream(字节输入流)或者Reader(字符输入流)的子类

输出流:都是抽象类OutputStream(字节输出流)或者Writer(字符输出流)的子类

说明io流分为字节流和字符流

文件输入输出流

数据输入输出流

ZIP输入输出流

缓存输入输出流

3.文件字节流实例

文件字节流:

FileInputStream

FileOutputStream

public static void readAndWrite() throws IOException{

File f = new File("D:\stream2.txt");

if(!f.exists()){

f.createNewFile();

}

FileInputStream in = new FileInputStream("D:\stream.txt");

//FileOutputStream out = new FileOutputStream(f)

FileOutputStream out = new FileOutputStream(f,true); //这里第二个参数代表在写入的时候不会覆盖文件f原有的数据

byte[] b = new byte[1024];

int len;

while((len = in.read(b)) > 0){

out.write(b, 0, len);

}

in.close();
out.close();

}
文件缓存字节流:
public static void BufferreadAndWrite() throws IOException{ File f = new File("D:\stream2.txt"); if(!f.exists()){ f.createNewFile(); } FileInputStream in = new FileInputStream("D:\stream.txt"); BufferedInputStream bi = new BufferedInputStream(in); FileOutputStream out = new FileOutputStream(f,true); BufferedOutputStream bo = new BufferedOutputStream(out); byte[] b = new byte[1024]; //定义一个数组用来接收读取的字节,每次读取都会覆盖之前的字节 int len; while((len = bi.read(b)) > 0){ bo.write(b, 0, len); } bi.close(); bo.close(); }

 4.ZIP压缩流实例

4.1 zip压缩文件

ZipOutputStream

       

package mytest;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.util.zip.ZipEntry;

import java.util.zip.ZipOutputStream;

public class ZipStream {

public static void createZip(String file,String zip) throws IOException{

File f = new File(file); //源文件

if(!f.exists()){

return;

}

ZipOutputStream zipout = new ZipOutputStream(new FileOutputStream(zip));  //输出流-目标zip文件

packetZip(f,zipout); // 参数1 源文件  参数2.目标文件输出流

zipout.close();

}

@SuppressWarnings({  "unused" })

public static void packetZip(File f,ZipOutputStream zipout) throws IOException{

byte[] arr = new byte[1024];

if(f.isFile()){  //文件压缩
FileInputStream in = new FileInputStream(f);

ZipEntry en = new ZipEntry("" + f); //创建要压缩文件的zipEntry

zipout.putNextEntry(en);

int len;

while(( len = in.read())!= -1){

zipout.write(len);  //开始压缩    读是文件字节输入流 FileInputStream in ,写是zaip输出流ZipOutputStream zipout

}

in.close();

}else{

File[] listFiles = f.listFiles();

if(listFiles != null && listFiles.length > 0){

for (File file : listFiles) {

packetZip(file,zipout );

}

}

}
}
public static void main(String[] args) { try { createZip("D://HT","D://HT.zip"); } catch (IOException e) { e.printStackTrace(); } } }

4.2 Zip解压

/**

 * 解压文件

 * @param zipfileSt   zip文件系统路径

 * @throws IOException

 */

public static void decompressionZip(String zipfileSt) throws IOException{

File zf = new File(zipfileSt);

FileInputStream in = new FileInputStream(zf);

ZipInputStream zipin = new ZipInputStream(in);  //读取zip文件的ZipEntry

ZipFile zipfile = new ZipFile(zipfileSt);  //把ZIPEntry转换成输入流

zipin.getNextEntry();  //跳过根目录

ZipEntry entry = null;


while((entry = zipin.getNextEntry()) != null && (!entry.isDirectory()) ){

File f  = new File( entry.getName());

if(!f.exists()){

f.getParentFile().mkdirs();

f.createNewFile();

}

 
FileOutputStream out = new FileOutputStream(f);

InputStream inputStream = zipfile.getInputStream(entry); //相对压缩而言,解压多了一个步骤,把entry转换为字节流

byte[] arr = new byte[1024];

while( inputStream.read(arr) != -1){

out.write(arr);  //读是字节流  InputStream inputStream,写是文件字节输出流FileOutputStream out

}

out.close();

inputStream.close();

}

zipfile.close();

zipin.close();

}
原文地址:https://www.cnblogs.com/jthr/p/13204094.html