zoukankan      html  css  js  c++  java
  • 第五次作业:文件的扫描

    本次作业在文件扫描的基础上,加入了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 + "	record:" + times);
                }
                raf.close();                
            }catch(Exception e){
                e.printStackTrace();    
            }        
        }
    }

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

  • 相关阅读:
    2020杭电HDU-6863多校第八场Isomorphic Strings(Hash+学到的新东西)
    CodeForces 1395C-Boboniu and Bit Operations(位运算-暴力)
    洛谷P2585&ZJOI 2006-三色二叉树(树的染色-树形DP)
    洛谷P2016-战略游戏(树的最小点覆盖-树形DP)
    洛谷P2015-二叉苹果树(树形DP)
    洛谷P1352-没有上司的舞会(树形DP)
    CSUSTOJ 4004-你真的会吃零食吗?(打表)
    在线支付--支付宝
    使用rabbitmq rpc 模式
    在kubernetes 集群运行 odoo
  • 原文地址:https://www.cnblogs.com/xuebagyp/p/5395036.html
Copyright © 2011-2022 走看看