IO inputStream和outputStream
File
File类具有平台无关性(指的是操作系统,不用区分操作系统),将操所系统中的,文件,目录(文件夹),路径,封装成File对象。
静态成员变量
pathSeparator 与系统有关的路径分隔符字符(目录名称分隔符,path中体现) window下是 ;linux下是 :
separator 与系统有关的默认名称(目录)分隔符 window下是 \ liux下是 /
构造函数
File(String pathname) 可以传入一个目录路径则生成的就是一个目录对象,也可以传入一个文件路径生成的就是一个文件对象
File(String parent, String child) 传递路径,parent:字符串型的父路径,child:子路径 好处:单独操作父路径和子路径
File(File parent, String child) 传递路径,parent:File类型的父路径,child:子路径 好处:父路径是File类型,可以调用File类的方法
方法
boolean canRead() 测试应用程序是否可以读取此抽象路径名表示的文件。
boolean canWrite() 测试应用程序是否可以修改此抽象路径名表示的文件。
int compareTo(File pathname) 按字母顺序比较两个抽象路径名。
boolean createNewFile() 当且仅当不存在具有此抽象路径名指定的名称的文件时,原子地创建由此抽象路径名指定的一个新的空文件
static File createTempFile(String prefix, String suffix) 在默认临时文件目录中创建一个空文件,使用给定前缀和后缀生成其名称。
static File createTempFile(String prefix, String suffix, File directory) 在指定目录中创建一个新的空文件,使用给定的前缀和后缀字符串生成其名称。
boolean delete() 删除此抽象路径名表示的文件或目录。删除的文件或者文件夹不放回收站,直接从硬盘删除
void deleteOnExit() 在虚拟机终止时,请求删除此抽象路径名表示的文件或目录。
boolean equals(Object obj) 测试此抽象路径名与给定对象是否相等。
boolean exists() 测试此抽象路径名表示的文件或目录是否存在
File getAbsoluteFile() 返回抽象路径名的绝对路径名文件或者文件夹。 如果写的是相对路径,那么返回值就是工程相对于硬盘的绝对路径
String getAbsolutePath() 返回抽象路径名的绝对路径名字符串。 如果写的是相对路径,那么返回值就是工程相对于硬盘的绝对路径
File getCanonicalFile() 返回此抽象路径名的规范形式。
String getCanonicalPath() 返回抽象路径名的规范路径名字符串。
String getName() 返回由此抽象路径名表示的文件或目录的名称(路径的最后一个文件或者文件夹的名字)
String getParent() 返回此抽象路径名的父路径名的路径名字符串,如果此路径名没有指定父目录,则返回 null。
File getParentFile() 返回此抽象路径名的父路径名的抽象路径名,如果此路径名没有指定父目录,则返回 null。
String getPath() 将此抽象路径名转换为一个路径名字符串。
int hashCode() 计算此抽象路径名的哈希码。
boolean isAbsolute() 测试此抽象路径名是否为绝对路径名。
boolean isDirectory() 测试此抽象路径名表示的文件是否是一个目录。
boolean isFile() 测试此抽象路径名表示的文件是否是一个标准文件。
boolean isHidden() 测试此抽象路径名指定的文件是否是一个隐藏文件。
long lastModified() 返回此抽象路径名表示的文件最后一次被修改的时间。
long length() 返回由此抽象路径名表示的文件的字节数。
String[] list() 返回由此抽象路径名所表示的目录中的文件和目录的名称所组成字符串数组 仅限此层
String[] list(FilenameFilter filter) 返回由包含在目录中的文件和目录的名称所组成的字符串数组,这一目录是通过满足指定过滤器的抽象路径名来表示的。
File[] listFiles() 返回由此抽象路径名所表示的目录中的文件和目录的名称 所组成文件类型的绝对路径数组 仅限此层
File[] listFiles(FileFilter filter) 返回表示此抽象路径名所表示目录中的文件和目录的抽象路径名数组,这些路径名满足特定过滤器。
File[] listFiles(FilenameFilter filter) 返回表示此抽象路径名所表示目录中的文件和目录的抽象路径名数组,这些路径名满足特定过滤器。
static File[] listRoots() 列出可用的文件系统根目录。
boolean mkdir() 创建此抽象路径名指定的目录。
boolean mkdirs() 创建此抽象路径名指定的目录,包括创建必需但不存在的父目录。
boolean renameTo(File dest) 重新命名此抽象路径名表示的文件。
boolean setLastModified(long time) 设置由此抽象路径名所指定的文件或目录的最后一次修改时间。
boolean setReadOnly() 标记此抽象路径名指定的文件或目录,以便只可对其进行读操作。
String toString() 返回此抽象路径名的路径名字符串。
URI toURI() 构造一个表示此抽象路径名的 file: URI。
URL toURL() 将此抽象路径名转换成一个 file: URL。
文件过滤功能(输出某文件夹下所有.java的文件)
1、先写一个用来过滤.java文件的过滤器
public class MyJavaFilter implements FileFilter { @Override //该方法只有文件夹和.java结尾的文件才能通过 public boolean accept(File pathname) { if(pathname.isDirectory()){//如果传过来的是一个文件夹直接通过,方便后面遍历该文件夹下的文件 return true; } return pathname.getName().endsWith(".java");//如果是.java结尾的文件直接通过 } }
2、递归遍历文件夹下的所有文件
public class DiGui { public static void main(String[] args) { File file = new File("E:\\SSH\\day32_struts(一)"); getAllJava(file); } //递归方法,遍历该文件夹下的所有文件和文件夹 public static void getAllJava(File file){ File[] files = file.listFiles(new MyJavaFilter());//过滤后的.java结尾的文件和文件夹 for(File f : files){ if(f.isDirectory()){//如果是文件夹,调用递归方法遍历该文件夹,否则直接输出 getAllJava(f); } else { System.out.println(f); } } } }
IO
input和ouput是相对于工程而言的,input是从硬盘中向工程中写入内容,ouput是从工程中向硬盘写入内容
OutputStream
此抽象类是表示输出字节流的所有类的超类。输出流接受输出字节并将这些字节发送到某个接收器。
方法
void close() 关闭此输出流并释放与此流有关的所有系统资源。
void flush() 刷新此输出流并强制写出所有缓冲的输出字节。
void write(byte[] b) 将 b.length 个字节从指定的字节数组写入此输出流。
void write(byte[] b, int off, int len) 将指定字节数组中从偏移量 off 开始的 len 个字节写入此输出流。
abstract void write(int b) 将指定的字节写入此输出流。
FileOutputStream
OutputStream的实现类,文件输出流是用于将数据写入 File
或 FileDescriptor
的输出流。文件是否可用或能否可以被创建取决于基础平台。特别是某些平台一次只允许一个 FileOutputStream(或其他文件写入对象)打开文件进行写入。在这种情况下,如果所涉及的文件已经打开,则此类中的构造方法将失败。FileOutputStream 换行符是 \r\n
构造方法(绑定一个输出的目的)
流对象的构造方法可以创建文件,如果文件存在,则直接覆盖该文件(源文件内容清空)
FileOutputStream(File file) 创建一个向指定 File 对象表示的文件中写入数据的文件输出流。
FileOutputStream(File file, boolean append) 创建一个向指定 File 对象表示的文件中写入数据的文件输出流。追加
FileOutputStream(FileDescriptor fdObj) 创建一个向指定文件描述符处写入数据的输出文件流,该文件描述符表示一个到文件系统中的某个实际文件的现有连接。
FileOutputStream(String name) 创建一个向具有指定名称的文件中写入数据的输出文件流。
FileOutputStream(String name, boolean append) 创建一个向具有指定 name 的文件中写入数据的输出文件流。追加
特有方法
protected void finalize() 清理到文件的连接,并确保在不再引用此文件输出流时调用此流的 close 方法。
FileChannel getChannel() 返回与此文件输出流有关的惟一 FileChannel 对象。
FileDescriptor getFD() 返回与此流有关的文件描述符。
InputStream
此抽象类是表示字节输入流的所有类的超类
方法
int available() 返回此输入流方法的下一个调用方可以不受阻塞地从此输入流读取(或跳过)的字节数。
void close() 关闭此输入流并释放与该流关联的所有系统资源。
void mark(int readlimit) 在此输入流中标记当前的位置。
boolean markSupported() 测试此输入流是否支持 mark 和 reset 方法。
abstract int read() 从输入流读取下一个数据字节。
int read(byte[] b) 从输入流中读取一定数量的字节并将其存储在缓冲区数组 b 中。
int read(byte[] b, int off, int len) 将输入流中最多 len 个数据字节读入字节数组。
void reset() 将此流重新定位到对此输入流最后调用 mark 方法时的位置。
long skip(long n) 跳过和放弃此输入流中的 n 个数据字节。
FileInputStream
FileInputStream
从文件系统中的某个文件中获取输入字节。哪些文件可用取决于主机环境。(不能指定不存在的文件)
构造方法
FileInputStream(File file) 通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的 File 对象 file 指定。
FileInputStream(FileDescriptor fdObj) 通过使用文件描述符 fdObj 创建一个 FileInputStream,该文件描述符表示到文件系统中某个实际文件的现有连接。
FileInputStream(String name) 通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的路径名 name 指定。
特有方法
protected void finalize() 确保在不再引用文件输入流时调用其 close 方法。
FileChannel getChannel() 返回与此文件输入流有关的惟一 FileChannel 对象。
FileDescriptor getFD() 返回表示到文件系统中实际文件的连接的 FileDescriptor 对象,该文件系统正被此 FileInputStream 使用。
FileOutputStream异常处理
/* * IO 处理异常 * 细节 * 在catch输出异常信息 * 然后抛出RunTimeException异常 * 如果new File资源失败了需要抛出异常吗? * 所以说在关闭资源的时候先判断file是否建立成功 * */ public class Demo { public static void main(String[] args) { FileOutputStream fos = null; try { fos = new FileOutputStream("F:\\grf.txt"); fos.write("grf".getBytes()); } catch (IOException e) { System.out.println(e.getMessage()); throw new RuntimeException("文件写入失败,请重试!"); } finally{ try { if(fos!=null){ fos.close(); } } catch (IOException e) { throw new RuntimeException("关闭资源失败"); } } } }
FileInputStream和FileOutputStream结合复制文件异常处理
public class IoTest { public static void main(String[] args) { FileInputStream fis = null; FileOutputStream fos = null; try { fis = new FileInputStream("E:\\ms.txt"); fos = new FileOutputStream("F:\\grf.txt"); int len = 0; byte[] bytes = new byte[1024]; while((len=fis.read(bytes))>-1){ fos.write(bytes, 0, len); } } catch (Exception e) {//---------------处理异常start------------------------ System.out.println(e.getMessage()); throw new RuntimeException("文件复制失败"); } finally { try { if(fos!=null) fos.close(); } catch (IOException e) { throw new RuntimeException("释放资源失败"); } finally { try { if(fis!=null) fis.close(); } catch (IOException e) { throw new RuntimeException("释放资源失败"); } } }//---------------处理异常end------------------------ } }