第十二周java学习总结

emmm…由于上周老师有事有点小耽搁
所以这周学习的内容就有点多
主要学习了异常处理和文件读写的相关操作
Java异常处理

一、引入
编写程序,错误难免。在没有异常处理之前,我们一般是通过选择结构来防范可能出现的错误。比如,我们编写实数除法程序,可以通过一个选择结构来判断除数是否为零。
1、创建DivisionDemo01类

package net.wek12异常;

import java.util.Scanner;

/**
 * 功能:实现实数除法
 *       通过选择结构防范除数为0
 * 作者:谯婷
 * 日期:2019.5.16
 */
public class DivisionDemo01 {
    public static void main(String[] args) {
        //声明部分
        double a, b , q;
        Scanner sc = new Scanner(System.in);

        //输入部分
        System.out.print("a = ");
        a = sc.nextDouble();
        System.out.print("b = ");
        b = sc.nextDouble();

        //处理部分
        if (b != 0){
            q = a / b;
            //输出部分
            System.out.println(a + "/" + b + " = " + q);
        }else{
            //输出部分
            System.out.println("温馨提示:除数不能为零!");
        }
    }
}

运行程序,测试除数为零的结果:
在这里插入图片描述
2、创建DivisionDemo02类,采用异常处理来方法除数为零

package net.wek12异常;

import java.util.Scanner;

/**
 * 功能:实现实数除法
 * 通过异常处理防范除数为0
 * 作者:谯婷
 * 日期:2019.5.16
 */
public class DivisionDemo02 {
    public static void main(String[] args) {
        //声明部分
        double a,b,q;
        Scanner sc = new Scanner(System.in);
        //输入部分
        System.out.print("a = ");
        a = sc.nextDouble();
        System.out.print("b = ");
        b = sc.nextDouble();

        //处理部分
        try{
            q = a / b;
            //输出部分
            System.out.println(a + "/" + b + " = " + q);
        }catch (ArithmeticException e ){
            e.printStackTrace();
        }
    }
}

运行程序,故意让除数为零,看看会出现什么情况。
在这里插入图片描述
除数为零在JDK8里并不认为是一种异常,而是会给出Infinity或NaN两种计算结果。为了演示异常处理机制,那么我们就得另外找一种异常来演示。比如下标越界异常。

4、创建ArrayDemo01类,演示数组下标越界异常

package net.wek12异常;

/**
 * 功能:演示数组下标越界异常
 * 作者:谯婷
 * 日期:2019.5.16
 */
public class ArrayDemo01 {
    public static void main(String[] args) {
        int[] a = new int[10];

        try {
            for (int i = 0; i < a.length; i++) {
                a[i] = i + 1;
            }
        } catch (ArrayIndexOutOfBoundsException e) {
            //此处写异常处理代码(只有出现异常,才会执行)
            System.err.println("温馨提示:数组下标越界!");
        } finally {
            //此处写善后代码(不管有无异常,都要执行的)
            System.out.println("执行完毕!");
        }
        try {
            for (int i = 0; i <= a.length; i++) {
                a[i] = i + 1;
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
        }
    }
}

二、自定义异常的使用
通过案例演示来说明如何自定义异常类,如何抛出异常。
1、创建CalcTriangleArea类

package net.wek12异常;

import java.util.Scanner;

/**
 * 功能:采用OOP编程模式计算三角形面积
 * 作者:华卫
 * 日期:2019年5月19日
 */
public class CalcTriangleArea {
    public static void main(String[] args) {
        double a, b, c, s;
        Scanner sc = new Scanner(System.in);
        Triangle triangle = new Triangle();

        System.out.print("a = ");
        a = sc.nextDouble();
        System.out.print("b = ");
        b = sc.nextDouble();
        System.out.print("c = ");
        c = sc.nextDouble();

        triangle.setA(a);
        triangle.setB(b);
        triangle.setC(c);
        try {
            s = triangle.area();
            System.out.println("s = " + s);
        } catch (Exception e) {
            System.err.println("温馨提示:" + e.getMessage());
        }
    }

    // 内部类(Inner Class)
    private static class Triangle {
        private double a, b, c;

        public double getA() {
            return a;
        }

        public void setA(double a) {
            this.a = a;
        }

        public double getB() {
            return b;
        }

        public void setB(double b) {
            this.b = b;
        }

        public double getC() {
            return c;
        }

        public void setC(double c) {
            this.c = c;
        }

        /**
         * @return 三角形面积
         */
        public double area() throws TriangleException {
            double p, s;
            p = (a + b + c) / 2;
            // 设置抛出异常的条件
            if (a < 0 || b < 0 || c < 0 || !(a + b > c && b + c > a && c + a > b)) {
                throw new TriangleException();
            }
            s = Math.sqrt(p * (p - a) * (p - b) * (p - c));
            return s;
        }
    }
}

在这里插入图片描述
拓展:随机点名程序
在这里插入图片描述

package net.test;

import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.*;
import java.util.Random;

/**
 * 功能:随机点名程序
 * 作者:华卫
 * 日期:2019年5月16日
 */
public class RandomCallRoll extends JFrame {
    //声明部分
    static JFrame frmCallRoll;
    JPanel pnlCenter, pnlSouth, pnlContent;
    JLabel lblStudentName;
    JButton btnStart, btnStop, btnExit;
    String[] names;
    int studentNum;
    Random rnd;
    BufferedReader br;
    String nextLine;
    JList lstClass;
    String[] strClasses;
    JScrollPane scpClass;
    boolean m_bRunning;
    Thread thread;

    //构造方法
    public RandomCallRoll(String title) {
        super(title); //调用父类构造方法
        init();//调用初始化方法
    }

    //初始化方法
    private void init() {
        //创建组件
        pnlCenter = new JPanel();
        pnlSouth = new JPanel();
        pnlContent = new JPanel();
        lblStudentName = new JLabel("请点名");
        btnStart = new JButton("开始");
        btnStop = new JButton("停止");
        btnExit = new JButton("退出");
        rnd = new Random();

        File dir = new File("src/net/test");
        strClasses = dir.list(new MyFilter());
        lstClass = new JList(strClasses);
        scpClass = new JScrollPane(lstClass, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
                JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);

        lstClass.setSelectedIndex(0); //选中列表框的第一项
        this.setTitle("随机点名程序—" + strClasses[0]);  //修改窗口标题

        try {
            br = new BufferedReader(new FileReader("src/net/test/" + strClasses[0]));
            nextLine = br.readLine();
            while (nextLine != null) {
                studentNum++;
                nextLine = br.readLine();
            }
            names = new String[studentNum];
            br = new BufferedReader(new FileReader("src/net/test/" + strClasses[0]));
            nextLine = br.readLine();
            int i = 0;
            while (nextLine != null) {
                names[i] = nextLine;
                i++;
                nextLine = br.readLine();
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        //设置布局方式,添加组件
        this.setContentPane(pnlContent); //将pnlContent设置为内容面板
        pnlContent.setLayout(new BorderLayout()); //设置为边框布局
        pnlContent.add(pnlCenter, "Center");
        pnlContent.add(pnlSouth, "South");
        pnlCenter.add(lblStudentName);
        pnlSouth.add(scpClass);
        pnlSouth.add(btnStart);
        pnlSouth.add(btnStop);
        pnlSouth.add(btnExit);

        //设置组件属性
        pnlCenter.setBackground(Color.YELLOW);
        pnlSouth.setBackground(Color.YELLOW);
        lblStudentName.setForeground(Color.RED);
        lblStudentName.setFont(new Font("黑体", Font.BOLD, 200));
        btnStart.setFont(new Font("黑体", Font.BOLD, 100));
        btnStop.setFont(new Font("黑体", Font.BOLD, 100));
        btnExit.setFont(new Font("黑体", Font.BOLD, 100));

        //设置窗口属性
        this.setVisible(true);  //让窗口可见
        this.setSize(700, 500); //设置窗口大小
        this.setResizable(false);//窗口不能更改大小
        this.pack();  //使得窗口刚好能容纳一切组件
        this.setLocationRelativeTo(null);  //让窗口在屏幕居中(相对定位)

        //注册监听器+编写事件处理代码
        this.addWindowListener(new WindowAdapter() {    //继承式的匿名内部类
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });

        btnExit.addActionListener(new ActionListener() {  //接口式的匿名内部类
            @Override
            public void actionPerformed(ActionEvent e) {
                System.exit(0);
            }
        });

        //开始按钮事件
        btnStart.addActionListener(new ActionListener() {//接口式的匿名内部类
            @Override
            public void actionPerformed(ActionEvent e) {
                thread = new Thread(new Runnable() {
                    @Override
                    public void run() {
                        while (m_bRunning) {
                            lblStudentName.setText(names[Math.abs(rnd.nextInt()) % names.length]);
                            try {
                                Thread.sleep(100);
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                        }
                    }
                });
                thread.start();
                m_bRunning = true;
            }
        });

        //停止按钮单击事件
        btnStop.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                m_bRunning = false;
            }
        });

        //列表框选择事件
        lstClass.addListSelectionListener(new ListSelectionListener() {
            @Override
            public void valueChanged(ListSelectionEvent e) {
                if (e.getValueIsAdjusting()) {  //表明鼠标按下还没释放
                    frmCallRoll.setTitle("随机点名程序—"
                            + strClasses[lstClass.getSelectedIndex()]);  //修改窗口标题
                    lblStudentName.setText("请点名");
                    studentNum = 0;  //对每个班级重新统计人数
                    try {
                        br = new BufferedReader(new FileReader(
                                "src/net/test/" + strClasses[lstClass.getSelectedIndex()]));
                        nextLine = br.readLine();
                        while (nextLine != null) {
                            studentNum++;
                            nextLine = br.readLine();
                        }
                        names = new String[studentNum];
                        br = new BufferedReader(new FileReader(
                                "src/net/test/" + strClasses[lstClass.getSelectedIndex()]));
                        nextLine = br.readLine();
                        int i = 0;
                        while (nextLine != null) {
                            names[i] = nextLine;
                            i++;
                            nextLine = br.readLine();
                        }
                    } catch (FileNotFoundException e1) {
                        e1.printStackTrace();
                    } catch (IOException e2) {
                        e2.printStackTrace();
                    }
                }
            }
        });
    }

    //主方法
    public static void main(String[] args) {
        frmCallRoll = new RandomCallRoll("随机点名程序");
    }
}

//创建一个文件名过滤器,过滤txt文件
class MyFilter implements FilenameFilter {
    @Override
    public boolean accept(File dir, String name) {
        if (name.endsWith(".txt")) {
            return true;
        } else {
            return false;
        }
    }
}

package net.test;

import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.*;
import java.util.Random;

/**
 * 功能:随机点名程序
 * 作者:华卫
 * 日期:2019年5月16日
 */
public class RandomCallRoll extends JFrame {
    //声明部分
    static JFrame frmCallRoll;
    JPanel pnlCenter, pnlSouth, pnlContent;
    JLabel lblStudentName;
    JButton btnStart, btnStop, btnExit;
    String[] names;
    int studentNum;
    Random rnd;
    BufferedReader br;
    String nextLine;
    JList lstClass;
    String[] strClasses;
    JScrollPane scpClass;
    boolean m_bRunning;
    Thread thread;

    //构造方法
    public RandomCallRoll(String title) {
        super(title); //调用父类构造方法
        init();//调用初始化方法
    }

    //初始化方法
    private void init() {
        //创建组件
        pnlCenter = new JPanel();
        pnlSouth = new JPanel();
        pnlContent = new JPanel();
        lblStudentName = new JLabel("请点名");
        btnStart = new JButton("开始");
        btnStop = new JButton("停止");
        btnExit = new JButton("退出");
        rnd = new Random();

        File dir = new File("src/net/test");
        strClasses = dir.list(new MyFilter());
        lstClass = new JList(strClasses);
        scpClass = new JScrollPane(lstClass, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
                JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);

        lstClass.setSelectedIndex(0); //选中列表框的第一项
        this.setTitle("随机点名程序—" + strClasses[0]);  //修改窗口标题

        try {
            br = new BufferedReader(new FileReader("src/net/test/" + strClasses[0]));
            nextLine = br.readLine();
            while (nextLine != null) {
                studentNum++;
                nextLine = br.readLine();
            }
            names = new String[studentNum];
            br = new BufferedReader(new FileReader("src/net/test/" + strClasses[0]));
            nextLine = br.readLine();
            int i = 0;
            while (nextLine != null) {
                names[i] = nextLine;
                i++;
                nextLine = br.readLine();
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        //设置布局方式,添加组件
        this.setContentPane(pnlContent); //将pnlContent设置为内容面板
        pnlContent.setLayout(new BorderLayout()); //设置为边框布局
        pnlContent.add(pnlCenter, "Center");
        pnlContent.add(pnlSouth, "South");
        pnlCenter.add(lblStudentName);
        pnlSouth.add(scpClass);
        pnlSouth.add(btnStart);
        pnlSouth.add(btnStop);
        pnlSouth.add(btnExit);

        //设置组件属性
        pnlCenter.setBackground(Color.YELLOW);
        pnlSouth.setBackground(Color.YELLOW);
        lblStudentName.setForeground(Color.RED);
        lblStudentName.setFont(new Font("黑体", Font.BOLD, 200));
        btnStart.setFont(new Font("黑体", Font.BOLD, 100));
        btnStop.setFont(new Font("黑体", Font.BOLD, 100));
        btnExit.setFont(new Font("黑体", Font.BOLD, 100));

        //设置窗口属性
        this.setVisible(true);  //让窗口可见
        this.setSize(700, 500); //设置窗口大小
        this.setResizable(false);//窗口不能更改大小
        this.pack();  //使得窗口刚好能容纳一切组件
        this.setLocationRelativeTo(null);  //让窗口在屏幕居中(相对定位)

        //注册监听器+编写事件处理代码
        this.addWindowListener(new WindowAdapter() {    //继承式的匿名内部类
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });

        btnExit.addActionListener(new ActionListener() {  //接口式的匿名内部类
            @Override
            public void actionPerformed(ActionEvent e) {
                System.exit(0);
            }
        });

        //开始按钮事件
        btnStart.addActionListener(new ActionListener() {//接口式的匿名内部类
            @Override
            public void actionPerformed(ActionEvent e) {
                thread = new Thread(new Runnable() {
                    @Override
                    public void run() {
                        while (m_bRunning) {
                            lblStudentName.setText(names[Math.abs(rnd.nextInt()) % names.length]);
                            try {
                                Thread.sleep(100);
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                        }
                    }
                });
                thread.start();
                m_bRunning = true;
            }
        });

        //停止按钮单击事件
        btnStop.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                m_bRunning = false;
            }
        });

        //列表框选择事件
        lstClass.addListSelectionListener(new ListSelectionListener() {
            @Override
            public void valueChanged(ListSelectionEvent e) {
                if (e.getValueIsAdjusting()) {  //表明鼠标按下还没释放
                    frmCallRoll.setTitle("随机点名程序—"
                            + strClasses[lstClass.getSelectedIndex()]);  //修改窗口标题
                    lblStudentName.setText("请点名");
                    studentNum = 0;  //对每个班级重新统计人数
                    try {
                        br = new BufferedReader(new FileReader(
                                "src/net/test/" + strClasses[lstClass.getSelectedIndex()]));
                        nextLine = br.readLine();
                        while (nextLine != null) {
                            studentNum++;
                            nextLine = br.readLine();
                        }
                        names = new String[studentNum];
                        br = new BufferedReader(new FileReader(
                                "src/net/test/" + strClasses[lstClass.getSelectedIndex()]));
                        nextLine = br.readLine();
                        int i = 0;
                        while (nextLine != null) {
                            names[i] = nextLine;
                            i++;
                            nextLine = br.readLine();
                        }
                    } catch (FileNotFoundException e1) {
                        e1.printStackTrace();
                    } catch (IOException e2) {
                        e2.printStackTrace();
                    }
                }
            }
        });
    }

    //主方法
    public static void main(String[] args) {
        frmCallRoll = new RandomCallRoll("随机点名程序");
    }
}

//创建一个文件名过滤器,过滤txt文件
class MyFilter implements FilenameFilter {
    @Override
    public boolean accept(File dir, String name) {
        if (name.endsWith(".txt")) {
            return true;
        } else {
            return false;
        }
    }
}

---------------------------------------------------------------------------------------分割---------------------------------------
输入输出与文件读写
在这里插入图片描述
一、IO基本概念
Java对于数据的输入输出抽象出了一个重要概念——流(Stream)。
1、数据的输出
数据从程序到文件,叫做输出,引入流的概念,那就叫输出流,这个流是以字节为单位,叫做字节输出流(OutputStream)。如果是针对文本文件来进行操作,一般是以字符为单位,叫做字符输出流(Writer)。
2、数据的输入
数据从文件到程序,叫做输入,引入流的概念,那就叫输入流,这个流是以字节为单位,叫做字节输入流(InputStream)。如果是针对文本文件来进行操作,一般是以字符为单位,叫做字符输入流(Reader)。
二、输入输出基本数据
以前我们是采用Scanner来接收键盘输入的数据,现在我们换一种方式来处理。依然以案例来讲解如何操作。
1、在lesson11包里创建InputOutputPrimitiveData01
按 + 可以查看DataInputStream的继承关系图:
单击Intellij左侧的Structure选项卡,可以查看DataInputStream的属性与方法:
说明:如果出水管与进水管型号不同,那么就得不到正确的结果。

只有当进水管与出水管都是一样的型号,才能得到正确的结果。如下所示:
在这里插入图片描述
问题:输入的数据保存到了变量a里,可不可以进行计算,然后输出正确结果呢?
在这里插入图片描述
这样做不行,那么我们应该如何操作,才能让输入的数据参与运算之后还能输出正确的结果呢?

2、创建InputOutputPrimitiveData02

package net.wek12输入输出与文件读写;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * 功能:行读取键盘输入的数据
 * 作者:谯婷
 * 日期:2019.5.18
 */
public class InputOutputPrimitiveData02 {
    public static void main(String[] args) {
        int a;
        int couid;
        String name;
        int age;
        /**
         * System.in标准字节输入流,代表的是键盘
         * InputStreamReader将字节流转换成字符流
         * BufferedReader缓冲字符输入流,提供高效的行读取方法
         */
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        try {
            System.out.print("a = ");
            a = Integer.parseInt(br.readLine());//parse是解析的意思
            a = a + 150;
            System.out.println("a = "+a);
            System.out.print("couid = ");
            couid = Integer.parseInt(br.readLine());//parse是解析的意思
            System.out.print("name = ");
            name = br.readLine();//parse是解析的意思
            System.out.print("age = ");
            age = Integer.parseInt(br.readLine());//parse是解析的意思

            System.out.println("姓名:"+name +"学号:"+couid+"年龄:"+age);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

二、文件(File)
必须要注意一点,在Java里,File不仅可以指文件,还可以指目录。
File类提供了六种重载的构造方法,如下所示:
在这里插入图片描述
1、创建FileDemo01类
(1)创建目录与文件
(2)获取目录或文件的属性
(3)删除目录和文件

package net.wek12输入输出与文件读写;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;

/**
 * 功能:创建目录与文件
 * 获取目录或文件相关属性
 * 删除目录或文件
 * 作者:谯婷
 * 日期:2019年5月18日
 */
public class FileDemo01 {
    public static void main(String[] args) {
        // 创建File对象,指向一个目录,仅仅是一个逻辑概念
        File dir = new File("d:/park01");
        // 判断目录是否存在
        if (!dir.exists()) {
            // 调用File对象的创建目录方法,将逻辑概念转换成物理实在
            dir.mkdir();
            // 提示用户目录创建成功
            System.out.println("目录[" + dir.getPath() + "]创建成功!");
        } else {
            // 提示用户目录已经存在
            System.out.println("目录[" + dir.getPath() + "]已经存在!");
        }

        // 创建File对象,指向一个文件,仅仅是一个逻辑概念
        File file = new File(dir, "love.txt");
        // 判断文件是否存在
        if (!file.exists()) {
            try {
                // 调用File对象的创建文件方法,将逻辑概念转换成物理实在
                file.createNewFile();
                // 提示用户文件创建成功
                System.out.println("文件[" + file.getAbsolutePath() + "]创建成功!");
            } catch (IOException e) {
                // 提示用户文件创建失败
                System.out.println("文件[" + file.getAbsolutePath() + "]创建失败!");
            }
        } else {
            // 提示用户文件已经存在
            System.out.println("文件[" + file.getAbsolutePath() + "]已经存在!");
        }

        // 创建简单日期格式对象
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss");

        // 获取文件的相关属性
        System.out.println("文件路径:" + file.getPath());
        System.out.println("文件绝对路径:" + file.getAbsolutePath());
        System.out.println("文件名:" + file.getName());
        System.out.println("文件长度:" + file.length());
        System.out.println("文件最后修改时间:" + sdf.format(file.lastModified()));

        // 删除刚才创建的文件
        boolean isFileDeleted = file.delete();
        // 判断文件是否删除成功
        if (isFileDeleted) {
            System.out.println("文件[" + file.getPath() + "]删除成功!");
        } else {
            System.out.println("文件[" + file.getPath() + "]删除失败!");
        }

        // 删除刚才创建的目录
        boolean isDirDeleted = dir.delete();
        // 判断目录是否删除成功
        if (isDirDeleted) {
            System.out.println("目录[" + dir.getPath() + "]删除成功!");
        } else {
            System.out.println("目录[" + dir.getPath() + "]删除失败!");
        }
    }
}

2、创建FileDemo02类
任务:获取某个目录下全部子目录与文件的名称。

package net.wek12输入输出与文件读写;

import java.io.File;
import java.io.FilenameFilter;

/**
 * 功能:查看某个目录下的文件列表
 * 作者:华卫
 * 日期:2019年5月18日
 */
public class FileDemo02 {
    public static void main(String[] args) {
        /* 任务1、查看c:\Windows目录下全部子目录与文件*/
        File dir = new File("c:/windows");
        String[] filenames = dir.list();
        for (int i = 0; i < filenames.length; i++) {
            System.out.println(dir.getPath() + "\\" + filenames[i]);
        }
        System.out.println("======================");

        /* 任务2、查看c:\Windows目录下全部子目录与文件,目录放在一切,文件放在一起*/
        File[] files = dir.listFiles();
        System.out.println("目录:");
        for (File file: files) {
            if (file.isDirectory()) {
                System.out.println(file.getAbsolutePath());
            }
        }
        System.out.println("文件:");
        for (File file: files) {
            if (file.isFile()) {
                System.out.println(file.getAbsolutePath());
            }
        }

        /* 任务3、查看c:\Windows目录下全部文本文件*/
        // 利用了匿名接口对象来过滤满足条件的文件名
        String[] txtFilenames = dir.list(new FilenameFilter() {
            @Override
            public boolean accept(File dir, String name) {
                return name.endsWith(".txt");
            }
        });
        System.out.println("文本文件:");
        for (String txtFilename: txtFilenames) {
            System.out.println(dir.getPath() + "\\" + txtFilename);
        }
    }
}

子目录名与文件名是混在一起的,那么怎样才能将目录和文件分开显示呢?

3、创建FileDemo03类
任务:分开显示指定目录下的子目录与文件

package net.wek12输入输出与文件读写;

import java.io.File;

/**
 * 功能:分开显示指定目录下的子目录与文件名称
 * 作者:华卫
 * 日期:2019年5月18日
 */
public class FileDemo03 {
    public static void main(String[] args) {
        // 创建File对象,指向一个目录(c:\windows)
        File dir = new File("c:/windows");

        // 获取指定目录下的子目录与文件对象数组
        File[] files = dir.listFiles();

        // 显示指定目录下的子目录
        System.out.println(dir.getPath() + "下的子目录:");
        // 遍历files数组,筛选出子目录
        for (File file: files) {
            if (file.isDirectory()) {
                System.out.println(file.getPath());
            }
        }

        // 显示指定目录下的文件
        System.out.println(dir.getPath() + "下的文件:");
        // 遍历files数组,筛选出文件
        for (File file: files) {
            if (file.isFile()) {
                System.out.println(file.getPath());
            }
        }
    }
}

如何查看某个目录下指定类型的文件?比如我们只想查看c:\windows目录下的文本文件。

4、创建FileDemo04类
任务:显示指定目录下某种类型的文件(比如文本件或可执行文件)

package net.wek12输入输出与文件读写;

import java.io.File;
import java.io.FilenameFilter;

/**
 * 功能:显示指定目录下某种类型的文件
 * 作者:华卫
 * 日期:2019年5月18日
 */
public class FileDemo04 {
    public static void main(String[] args) {
        // 创建File对象,指向目录(c:\windows)
        File dir = new File("c:/windows");
        // 获取指定目录下全部文本文件名
        String[] txtFilenames = dir.list(new FilenameFilter() {
            @Override
            public boolean accept(File dir, String name) {
                return name.endsWith(".txt");
            }
        });

        System.out.println(dir.getPath() + "下的文本文件:");
        // 遍历txtFilenames数组
        for (String txtFilename: txtFilenames) {
            System.out.println(txtFilename);
        }        
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值