第五次作业:文件的扫描

本次作业在文件扫描的基础上,加入了GUI界面,通过JList来显示扫描文件夹中的文件。并拓展了使用下拉菜单来对文件进行分类。根据后缀的不同,分为几类。

先上代码和图。

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.event.ChangeEvent;

public class test {
    public JList fileList;
    public static String[] bmp =new String[20];
    public static String[] gif =new String[20];
    public static String[] jpg =new String[20];
    public static int i=0,j=0,k=0;
    /**
     * @param args
     */
    public static void listenDirectory(File dir) throws IllegalAccessException{
        //判断dir是否存在,使用Fire类的
        if(!dir.exists()){
            //如果不存在,则抛出异常
            throw new IllegalAccessException("目录"+dir+"不存在。");
        }
        //判断dir是否为目录使用Fire类的isdirectory方法
        if(!dir.isDirectory()){
            throw new IllegalArgumentException(dir+"不是目录");
        }
        //获得指定目录dir下的文件及子目录并输出
//        String[] fileNames=dir.list();
//        for(String s:fileNames){
//            System.out.println(dir+"\\"+s);
//        }
//        System.out.println();
        final File[] files = dir.listFiles();
        for(File file:files){
            if(file.getName().contains("bmp")){    //寻找文件名带有“bmp”的文件
            bmp[i]=dir+"\\"+file.getName();        //将带有“bmp”的文件名放入数组中
            i++;}
            if(file.getName().contains("gif")){     //寻找文件名带有“gif”的文件
                gif[j]=dir+"\\"+file.getName();     //将带有“gif”的文件名放入数组中
                j++;}
            if(file.getName().contains("jpg")){     //寻找文件名带有“jpg”的文件
                jpg[k]=dir+"\\"+file.getName();     //将带有“jpg”的文件名放入数组中
                k++;}
//            System.out.println(file);
        }
        //实现只列出目录下的所有文件名称
//        System.out.println();
//        File[] filess = dir.listFiles();
//        for(File fil:filess){
//            //如果是文件,则输出
//            if(fil.isFile()){
//            System.out.println(fil);
//            }
//            }
        final JFrame frame = new JFrame();
        frame.getContentPane();
        frame.setLayout(new BorderLayout(2,1));
         String[] formats = { "所有格式", "bmp格式", "gif格式", "jpg格式" };
     final JComboBox formatList = new JComboBox(formats);
    final JList fileList = new JList(files);
        fileList.setForeground(new Color(10,171,226));            //设置JList的颜色
        fileList.setBackground(new Color(0,0,0));                 //设置JList的颜色
        fileList.setSelectionBackground(new Color(8,49,134));     //设置JList的颜色
        fileList.setSelectionForeground(new Color(140,171,226));  //设置JList的颜色
       final JScrollPane scrollPane = new JScrollPane(fileList);
       scrollPane.setColumnHeaderView(new JLabel("图片目录"));      //给JList顶部加一个标签
       frame.add(formatList, BorderLayout.NORTH);
       frame.add(scrollPane, BorderLayout.CENTER);
       frame.setVisible(true);
       Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
       frame.setBounds(d.width/2, d.height/2, 250, 400);
       //
       formatList.addActionListener(new ActionListener(){
             public void actionPerformed(ActionEvent e)
             {   if (e.getSource() == formatList)
             {  if(formatList.getSelectedIndex()==0)
             {
             fileList.setListData(files);       //列表框选择所有文件时,显示所有文件
             }
                 if(formatList.getSelectedIndex()==1)
             {
             fileList.setListData(bmp);         //列表框选择“bmp”文件时,显示带“bmp”的文件
             }

             if(formatList.getSelectedIndex()==2)
             {
             fileList.setListData(gif);          //列表框选择“gif”文件时,显示带“gif”的文件
             }
             if(formatList.getSelectedIndex()==3)
             {
             fileList.setListData(jpg);           //列表框选择“jpg”文件时,显示带“jpg”的文件
             }
                 }}});
             }
    public static void main(String[] args) {
        try {
            test.listenDirectory(new File("D:\\java目录"));
        } catch (IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }}

此次作业按照老师上次的留言,加上了备注~

我专门建了一个目录,往里面放了三种类型的图片文件。gif jpg 和bmp。

并且加入了滚动条,在目录放不下的时候显示。

下拉菜单显示了三种格式和显示所有。

这是选择三种类型文件时的截图。在选择不同类型的文件时,只显示该类型的文件。

这是所扫描文件的目录。

本次作业在筛选文件时,有很大提高。首先先对所有的文件名保存到数组中,然后对每一个名字进行筛选,根据不同的后缀放入不同的数组中去。最后在选择下拉菜单时,选择哪一类型的菜单,就显示哪一类型的数组。

这次作业的制作,让我在用FIle及foreach循环有了更加深刻的印象。

======================================================================================

------------------------------------------分        割         线--------------------------------------------

======================================================================================

在做第二个打破记录时,遇到了问题

import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;

public class TestRandomAccessFile{
    private File file;
    public static void main(String[] args){
        TestRandomAccessFile traf = new TestRandomAccessFile();
        traf.init();
        traf.record("Adom",30);
        traf.listAllRecords();
    }

    public void record(String record_breaker, int times){
        try{
            RandomAccessFile raf = new RandomAccessFile(file,"rw");
            boolean flag = false;
            while(raf.getFilePointer() < raf.length()){
                String name = raf.readUTF();
                int record;
                record = raf.readInt();
                if(record_breaker.equals(name)&&record<times){
                    raf.writeInt(times);
                    record = times;
                    flag = true;
                    break;
                }else{
                    raf.skipBytes(4);
                }
            }
            if(!flag){
                raf.writeUTF(record_breaker);
                raf.writeInt(times);
            }
            raf.close();
        }catch(Exception e){
            e.printStackTrace();
        }
    }

    public void init(){
        if(file == null){
            file = new File("record.txt");
            try{
                file.createNewFile();
            }catch(IOException e){
                e.printStackTrace();
            }
        }
    }

    public void listAllRecords(){
        try{
            RandomAccessFile raf = new RandomAccessFile(file,"r");
            while(raf.getFilePointer() < raf.length()){
                String name = raf.readUTF();
                int times = raf.readInt();
                System.out.println("name:" + name + "\trecord:" + times);
            }
            raf.close();
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}

通过raf.readInt();只能读取第一行的Billy的22的记录,无法读取第二行中adom的30,从而无法继续比较,所以没有实现打破记录的功能。。。

时间: 2024-10-16 13:53:10

第五次作业:文件的扫描的相关文章

《机电传动控制》第五周作业

机电传动控制第五周作业 一.传动电机或控制电机在工业或生活中的应用: 1.电气伺服传动领域 在要求速度控制和位置控制(伺服)的场合,特种电机的应用越来越广泛.开关磁阻电动机.永磁无刷直流电动机.步进电动机.永磁交流伺服电动机.永磁直流电动机等都已在数控机床.工业电气自动化.自动生产线.工业机器人以及各种军.民用装备等领域获得了广泛应用.如交流伺服电机驱动系统应用在凹版印刷机中,以其高控制精度实现了极高的同步协调性,使这种印刷设备具有自动化程度高.套准精度高.承印范围大.生产成本低.节约能源.维修

第五课作业——持久化

第五课时作业 静哥 by 2016.3.14~2016.3.20   [作业描述] 1.配置aof,并且形成rewrite之前和之后的对比 2.配置rdb,手动命令和后台触发,截图对比持久化之前和之后的数据文件的差异 [作业一:配置aof,并且形成rewrite之前和之后的对比] [测试-1:没有配置持久化方式的情况下,手动执行bgrewriteaof命令] 当前redis数据库有13个key,string类型,手动执行bgrewriteaof命令: 注意:调用bgrewriteaof命令: 1

软件工程第五次作业(结对作业)

软件工程第五次作业 题目 本次作业我与合作伙伴选择的是题目1:四则运算生成 能够自动生成四则运算练习题 可以定制题目数量 用户可以选择运算符 用户设置最大数(如十以内.百以内等) 用户选择是否有括号.是否有小数 用户选择输出方式(如输出到文件.打印机等) 最好能提供图形用户界面(根据自己能力选做,以完成上述功能为主) 角色选择 驾驶员 - 能够完成全部代码工作,程序基本实现全部要求功能,并将代码上传至coding.net或者GitHub代码托管系统中 - 能够对导航员在本次编程工作中起到的作用给

wwwscan网站目录文件批量扫描工具

准备一个比赛样题里面给的一个扫描的工具: 不知道怎么用就上网百度了一下果然有关于这个软件的两篇介绍(感觉写的很好),第一篇介绍的应该和我的工具一样,也给了例子(现在Google不能访问了)和参数介绍,第二篇作者可能自己"升级"过软件也提供了下载地址.但是有个问题是:我机器上跑感觉那些多进程.端口和超时等参数都是虚设的,我试验的结果是我的软件只要输入ip或域名就可以运行扫描. ps:直接copy 文章来源:http://blog.chinaunix.net/uid-26726420-id

软件项目管理第五周作业

1.psp Job Type Date Start End Total 四周总结 随笔 2016.4.4 23:00 23:23 23 站立会议 会议 2016.4.4 13:30 13:45 15 数据库 编码测试 2016.4.4 13:50 15:20 90 站立会议 会议 2016.4.5 13:00 13:15 15 摇一摇1 编码测试 2016.4.5 13:35 14:20 45 站立会议 会议 2016.4.6 13:05 13:15 10 数据库函数添加 编码测试 2016.4

Ansible 五(inventory文件 主机清单)

Ansible 五(inventory文件  主机清单) Ansible 可同时操作属于一个组的多台主机,组和主机之间的关系通过 inventory 文件配置. 默认的文件路径为 /etc/ansible/hosts 除默认文件外,你还可以同时使用多个 inventory 文件(后面会讲到),也可以从动态源,或云上拉取 inventory 配置信息.详见 动态Inventory                   http://www.ansible.com.cn/docs/intro_dyna

使用windows API函数获取目录下所有文件名---目录下文件的扫描和处理

直接上代码 // test_max.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <windows.h> #include <Shlwapi.h> #include <iostream> #include <string> #include <vector> #pragma comment(lib,"shlwapi.lib") //注意放置的位置

集美大学网络1413第五次作业(团队一)

-- Deadline: 2017-04-05 22:00pm -- 第五次作业   团队展示     选题要求    团队成员绩效评估方法  附加项目  总分  团队/分值 基本信息 团队项目描述 队员风采 合照 特色描述 确定选题 真实.可用.有价值 预期的用户量 Git仓库 贡献分 每个成员的计划,如何帮助团队完成任务 博客互动 项目不局限于学校且有创新   0.5 0.5 1 0.5 1 0.5 2 0.5 0.5 1 0.5 1 1 10.5 六个核桃 0.5 0.5 1 0.5 1

第五课 Makefile文件的制作(补充)

序言: 前面的几节课讲解Makefile的一些基本知识也做了一些小例子实践了几下,那么到现在普通的练习则是没有问题.但是如果做项目文件较多又分层次等等还是会碰上好多问题的,这节课补充一些知识. 知识点: 1.makefile的内嵌函数: 2.二级目录的编写: 3.多级目录的编写: 原理: GNU make还提供了相关的函数来帮助我们编写此文件,使得我们在编写makefile文件时更加灵活健壮.提供的函数大致分为有:处理文件名.文本内容.变量.命令四种:在这节中不会讲太多的函数甚至连最基本的去空格

解题报告——2018级2016第二学期第五周作业排座椅

解题报告--2018级2016第二学期第五周作业 F:排座椅 描述 上课的时候总会有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情.不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来 之后,只有有限的D对同学上课时会交头接耳.同学们在教室中坐成了M行N列,坐在第i行第j列的同学的位置是(i,j),为了方便同学们进出,在教室中设 置了K条横向的通道,L条纵向的通道.于是,聪明的小雪想到了一个办法,或许可以减少上课时学生交头接耳的问题:她打算重新摆放桌椅,改变同学们桌椅