A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 小石姐姐 于 2018-4-27 11:34 编辑

黑马七期day09笔记



File类


构造方法:
File(String pathname) :将一个字符串路径封装成File对象
File(String parent,String child):传入一个父级路径和子级路径
File(File parent,String child):传入一个File类型的父级路径和子级路径




创建功能


boolean createNewFile():指定路径不存在该文件时创建文件,返回true,否则返回false
boolean mkdir():当指定的单级文件夹不存在时创建文件夹并返回true,否则返回false
boolean mkdirs():当指定的多级文件夹某一级文件夹不存在时,创建多级文件夹并返回true,否则返回false






删除功能
   (注意:删除一个文件夹,这个文件夹下面不能有其他的文件和文件夹)


boolean delete():删除文件或者删除单级文件夹\






相对路径:相对某个参照物,不能以盘符开头
         在eclipse中相对路径对应当前项目的根目录


绝对路径:固定不可改变的路径,以盘符开头


例如:


File f=new File("D:\\a\\b.txt")  //绝对路径


File f2=new File("a.txt")  //相对路径




File类的判断功能


boolean exists():判断指定路径的文件或文件夹是否存在
boolean isAbsolute():判断当前路路径是否是绝对路径
boolean isDirectory():判断当前的目录是否存在
boolean isFile():判断当前路径是否是一个文件
boolean isHidden():判断当前路径是否是隐藏文件




File类的获取功能和修改名字功能


  File getAbsoluteFile():获取文件的绝对路径,返回File对象
  String getAbsolutePath():获取文件的绝对路径,返回路径的字符串
  String getParent():获取当前路径的父级路径,以字符串形式返回该父级路径
  File getParentFile():获取当前路径的父级路径,以字File对象形式返回该父级路径
  String getName():获取文件或文件夹的名称
  String getPath():获取File对象中封装的路径
  long lastModified():以毫秒值返回最后修改时间
  long length():返回文件的字节数
  boolean renameTo(File dest): 将当前File对象所指向的路径 修改为 指定File所指向的路径






File类的其他获取功能
  String[] list():以字符串数组的形式返回当前路径下所有的文件和文件夹的名称
  File[] listFiles():以对象的形式返回当前路径下所有的文件和文件夹的名称
  static File[] listRoots():获取计算机中所有的盘符




两个练习(递归思想)


将目录下的所有.java文件删除()
将整个目录删除(有子目录的需要先删除子目录和文件)




字符流与字节流


概述


IO流分类:流向
                输入流 读取数据 FileReader Reader
                输出流 写出数据 FileWriter Writer
        数据类型
                字节流
                        字节输入流 读取数据 InputStream
                        字节输出流 写出数据 OutputStream
                字符流
                        字符输入流 读取数据 Reader
                        字符输出流 写出数据 Writer




利用字符流复制文件时有时会出现数据丢失(图片)
而利用字节流复制文件却不会出现这种情况
原因为:计算机本身的所有数据都是通过字节(即数字)存储与实现的
字节流不会通过编码表来传输数据而是直接通过字节(即数字)来传输
而字符流数据传输之间会通过 "编码表" 来先将字符与数字进行转换,所以有时会读取不到数据,会出现数据丢失




java.io.InputStream               # 字节输入流的顶层
    |_ FileInputStream            # 从文件获取的字节输入流
    |_ BufferedInputStream        # 带有缓冲区的高效字节输入流
java.io.OutputStream              # 字节输出流的顶层
    |_ FileOutputStream           # 从文件获取的字节输出流
    |_ BufferedOutputStream       # 带有缓冲区的高效字节输出流






案例:  使用字节流复制图片
继续使用项目s2-day09, 建包com.itheima.practice_09
建类Test
创建FileInputStream对象, 指向源文件路径
创建FileOutputStream对象, 指向要复制到的路径
使用一次读写一个字节数组的方式复制图片
使用try catch 捕获异常, 在finally中释放资源




public class Test {


    public static void main(String[] args) throws IOException {
        // 创建字节输入流对象
        FileInputStream fis = new FileInputStream("传智学院.jpg");
        // 创建字节输出流对象
        FileOutputStream fos = new FileOutputStream("复制传智学院.jpg");


        // 复制: 一次一个byte
        /*int by;
        while ((by = fis.read()) != -1) {
            fos.write(by);
        }*/


        // 复制: 一次一个byte数组
        int len;
        byte[] bys = new byte[1024];
        while ((len = fis.read(bys)) != -1) {
            fos.write(bys, 0, len);
        }


        // 释放资源
        fis.close();
        fos.close();
    }
}




FileInputStream类
int read(): 读取一个字节, 读完返回-1
注意返回值是int类型, 而不是byte
int read(byte[] b): 读取字节到数组中, 返回读取的长度. 读完返回-1
close(): 释放资源
FileOutputStream类
void write(byte b): 写一个字节
void write(byte[] b, int offset, int len): 从字节数组的指定索引开始写入指定长度个字节
close(): 释放资源




要点


目录可以封装为File对象
一看到包含内容, 就要想到:
File[] listFiles()
对于目录可以递归操作
对于文件则使用流读写复制




用什么流?


系统中各种文件都有, 所以用字节流
复制流程:
先创建目录, 才能在目录中创建文件
创建了文件, 才能向文件中写入数据
创建目录或文件前, 可以先判断是否已经存在boolean exists()




BufferedInputStream, BufferedOutputStream和以前学的BufferedReader, BufferedWriter使用方式基本一样, 只不过没有读写一行字符串的方法, 因为这不是操作字符的, 而是操作字节的














总结字节流






InputStream
操作文件的子类: FileInputStream类
int read(): 读取一个字节, 读完返回-1
注意返回值是int类型, 而不是byte
int read(byte[] b): 读取字节到数组中, 返回读取的长度. 读完返回-1
close(): 释放资源
OutputStream
操作文件的子类: FileOutputStream类
void write(byte b): 写一个字节
void write(byte[] b, int offset, int len): 从字节数组的指定索引开始写入指定长度个字节
close(): 释放资源
注意: 他们读写的是: byte, byte[]







































0 个回复

您需要登录后才可以回帖 登录 | 加入黑马