实训20 2018.4.20

Posted goxxiv

tags:

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

File类:

  File f=new File("F:\\Demo.java");

  创建文件:

    f.createNewFile(); 返回值boolean型

  创建文件夹(目录):

    f.mkdir();

    f.mkdirs();

    区别在于:mkdir()只能创建单层目录,而mkdirs()可以创建多层目录。

  删除文件:

    f.delete()

    删除的文件不会进入回收站(作用相当于shift+delete的组合键)。

    在删除时,要删除的文件夹中不能有子文件夹或文件,否则删除失败。

  判断是否存在:

    f.exists()

  获取:

    getAbsolutePath() 获得绝对路径

    getName() 获得文件(夹)名

    getPath() 获得(创建时使用的)路径。如果new File()时使用相对路径则返回相对路径,如果使用绝对路径则返回绝对路径。

    length() 获得文件长度

  File.separator 名称分隔符\(Windows下)

  File.pathseparator 路径分隔符;(Windows下)

  注:进行文件操作时需要处理异常。

 

FileFilter接口:

  FileFilter接口中只有一个方法accpet()。该方法的作用是定义过滤规则,返回布尔类型,判断是否满足该规则。

  因为是接口,所以在使用时需要创建类进行实现,实现accept()方法。

  

//过滤:找出目录下所有文件名以.java结尾的文件

class
fileFilter implements FileFilter { @Override public boolean accept(File pathname) { return (pathname.getName().endsWith(".java")); } }

 

  也可以使用匿名内部类实现FileFilter接口。

  该接口可用于File类下的listFiles()方法:

    (配合匿名内部类)

import java.io.*;

public class Test {
    public static void main(String[] args) throws IOException {
        File file = new File("F:\\");
        for (File f : file.listFiles(new FileFilter() {

            @Override
            public boolean accept(File pathname) {
                return pathname.getName().endsWith(".jpg");
            }
        })) {
            System.out.println(f);
        }
    }
}

  listFiles()方法会自动调用accept()方法。(见listFiles()源代码)

 

OutputStream抽象类:

  方法:(字节流,操作的是字节)

    write(int b) 把b写入文件。b输入的是int类型,但是表示的是ASCII值,所以在文件中显示对应的字符。

    write(byte [] b) 把b中字符写入文件。

    close() 关闭该流

FileOutputStream—OutputStream的子类:

  构造方法:

    FileOutputStream(File pathname);

    FileOutputStream(String pathname, boolean b); 当传入的布尔值为false时,写入的内容会把文件中的内容全部覆盖掉;当是true时,表示在原有内容的基础上进行追加。

    FileOutputStream(String pathname);  等价于FileOutputStream(String pathname, false);

  输出流的操作步骤:

    1.创建流对象,2.调用方法,3.关闭流对象

 

InputStream抽象类:

  方法:(字节流,操作的是字节)

    read() 从流中读入一个字节

    read(byte [] b) 从流中读入一定数量的字节保存在byte[]数组b中。“一定长度”指的是可能文件中的内容无法填满b,那么此时长度为内容的长度;如果文件中的内容多于b数组长度,那么此时长度为b数组长度。

    close()

FileInputStream—InputStream的子类:

  输出文件中的所有字符:

    方法一:

public static void main(String[] args) {
        FileInputStream fis = null;
        try {
            fis = new FileInputStream("F:/Demo.java");
            int len = 0;
            byte[] bs = new byte[10];
            while ((len = fis.read(bs))!=-1) {
                System.out.print(new String(bs,0,len));
          //使用String的构造方法创建一个String对象,参数:byte[] bs,int i,int j:从给定字符数组bs的第i个位置读到第j个位置之前(j-1处) } }
catch (Exception e) { throw new RuntimeException(); } finally { try { fis.close(); } catch (Exception e) { } } }

    使用数组接收流传入的内容。其中,while循环的作用在于:当文件中字符过多且大于给定数组的长度时,可以循环读取流中内容。

  方法二: 

public static void main(String[] args) {
        FileInputStream fis = null;
        try {
            // System.out.println(File.separator);
            fis = new FileInputStream("F:/Demo.java");
            int len2 = 0;
            for (int i = 0; (len2 = fis.read()) != -1; i++) {
                System.out.print((char) len2);
            }
        } catch (Exception e) {
            // TODO: handle exception
            throw new RuntimeException();
        } finally {
            try {
                fis.close();
            } catch (Exception e) {
            }
        }
    }

 

    使用read()方法读取单个字符并打印。

 

IOException异常的处理细节:

  1. 确保流对象的作用域,保证catch和finally能够使用该流对象。

  2. 在catch里面处理异常——IOException一旦出现,多为硬件问题,一般不能有程序处理,可以打印异常信息并重试。

import java.io.*;

public class TestFileInput {
    public static void main(String[] args) {
        FileInputStream fis = null;
     //对应第1条,因为finally中需要使用fis.close()来关闭该流,所以不能写在try代码块中。
     //处理办法:在try代码块外定义并附空值,在try代码块内创建对象。
try { fis = new FileInputStream("F:/Demo.java"); int len = 0; byte[] bs = new byte[10]; while ((len = fis.read(bs)) != -1) { System.out.print(new String(bs, 0, len));
} }
catch (Exception e) { throw new RuntimeException();
       //在此处抛出运行时异常,终止程序,或者return;否则程序会认为异常已处理,并继续执行下面的代码 }
finally { try {
          if(fis!=null)   fis.close();//在关闭流时也可能出现异常,所以需要try-catch }
catch (Exception e) { } } } }

 

以上是关于实训20 2018.4.20的主要内容,如果未能解决你的问题,请参考以下文章

2018-4-20 17周3次课 shell函数数组告警需求分析

2018-4-20 17周3次课 shell函数数组告警需求分析

2018-4-20

2018.4.20 五周第三次课

2018.4.20 五周第三次课

2018.4.20 设计模式之组合模式