`
Sunshineminyan
  • 浏览: 17154 次
  • 性别: Icon_minigender_2
社区版块
存档分类
最新评论

文件操作与异常机制

 
阅读更多
[img][/img]基础知识:
文件类位于java.io包中,可以通过File对象的方法创建文件对象、删除文件、列表目录下的文件,判断文件时目录还是正式文件,文件系统的基本规则:
1.文件的全名字包含文件的路径名和扩展名,单独讲一个文件名时,是不带路径但带扩展名的文件名。
2.同一目录下不可能存在同名的目录和真实文件,系统主要有目录类型的文件和真实文件两种,真实文件可以没有扩展名,还有第三种我们不需要计算的,如虚拟内存文件。
3.相对目录指不以路径分隔符开头的文件路径,绝对目录是指以根目录开头的路径;当前目录指相对与程序运行时的目录算起的相对路径。
4.目录分隔符和路径分隔符在liunx和win平台上不同,前者为"/"和":",后者为“\”和";",因此要注意。

类的构造方法(图一)

类中的方法(图二——图五)


练习:统计你磁盘中所有文件总数或者选择只统计某一种类型的文件或者根据文件名进行统计(线程)
代码:
主函数
package 文件;

import java.awt.Dimension;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

@SuppressWarnings("serial")
public class Homework extends JFrame {

/**
* @param args
*/
public static void main(String[] args) {
Homework h=new Homework();
h.initGUI();

}
private void initGUI() {
this.setTitle("文件统计");
this.setSize(new Dimension(800,600));
this.setDefaultCloseOperation(3);
this.setLocationRelativeTo(null);
this.setLayout(null);//设置布局为空,绝对布局
this.setResizable(false);//设置禁止改变窗体的大小



JLabel label1=new JLabel("路径");//实例化一个标签对象
label1.setBounds(50, 20, 40, 30);//设置位置
this.add(label1);
String[] q1=new String[3];
    q1[0]=new String("C:\\");
q1[1]=new String("D:\\");
q1[2]=new String("E:\\");

JComboBox jco1=new JComboBox(q1);//实例化一个下拉框的对象
jco1.setBounds(100, 20, 180, 30);
this.add(jco1);

JLabel label2=new JLabel("文件名");//实例化一个标签对象
label2.setBounds(300, 20, 40, 30);//设置位置
this.add(label2);
JTextField jte=new JTextField();////实例化一个文本输入框的对象
jte.setBounds(345, 20, 150, 30);//设置位置
this.add(jte);//将文本框(JTextField)添加到面板上

JLabel label3=new JLabel("文件格式");//实例化一个标签对象
label3.setBounds(500, 20, 60, 30);//设置位置
this.add(label3);
String[] q2=new String[3];
q2[0]=new String(".jpg");
q2[1]=new String(".txt");
q2[2]=new String(".png");
JComboBox jco2=new JComboBox(q2);//实例化一个下拉框的对象
jco2.setBounds(565, 20, 100, 30);
this.add(jco2);

JButton jb=new JButton("统计");//实例化一个统计按钮
jb.setBounds(670,20 ,80, 30);
this.add(jb);
//添加输出框
JTextArea ja=new JTextArea();
ja.setBounds(50, 100, 700, 300);
ja.setWrapStyleWord(true);

JScrollPane jp = new JScrollPane(ja);
jp.setBounds(50, 100, 650, 400);
this.add(jp);

//实例化一个背景图标对象
ImageIcon backgroundImage=new ImageIcon("pictures/4.png");
// 实例化一个标签对象用来显示背景图标
JLabel jlaBackground = new JLabel(backgroundImage);
jlaBackground.setBounds(0, 0, 800, 600);
this.add(jlaBackground);

this.setVisible(true);//设置窗体可见

//创建监听器,传入数据
FileListener fl=new FileListener(jco1,jco2,jte,ja);
jb.addActionListener(fl);
}
}

按钮上的动作监听器
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JComboBox;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class FileListener implements ActionListener{
private JComboBox jco1,jco2;
private JTextField jte;
private JTextArea ja;
private String name, pwd,path;
    //重写一个构造方法
public FileListener(JComboBox jco1,JComboBox jco2, JTextField jte ,JTextArea ja) {
this.jco1 = jco1;
this.jco2 = jco2;
this.jte=jte;
this.ja = ja;
}
/**
* 事件处理方法 重写事件接口的抽象方法
*/
public void actionPerformed(ActionEvent arg0) {
path = jco1.getSelectedItem().toString();
//判断要统计的磁盘,再启动线程
if (path.equals("C:\\")) {
FileCount fc=new FileCount("C:\\",ja,jte,jco2);
fc.start();//启动线程
} else if(path.equals("D:\\")){
FileCount fc=new FileCount("D:\\",ja,jte,jco2);
fc.start();//启动线程
}else{
FileCount fc=new FileCount("E:\\",ja,jte,jco2);
fc.start();//启动线程
}
}
}
线程
public class FileCount extends Thread{
private JTextArea ja;
private JTextField jte;
private String rootDirName,pwd,path;//本文件所操作的根目录的名称
private JComboBox jco2;
/**
* 统计一个磁盘文件数量的线程类
*/
public FileCount(String root,JTextArea ja, JTextField jte,JComboBox jco2){
this.rootDirName=root;
this.ja=ja;
this.jte=jte;
this.jco2=jco2;
}
//线程执行入口:调用线程对象Start()方法后,线程就从他的run方法开始独立执行
public void run(){
int fileCount=countDir(this.rootDirName);
ja.append(this.rootDirName+"统计完毕:"
+";公用文件数量:"+fileCount);

}
/**
* 计算一个文件下面所有文件的长度
* @param dir:要计算的目录的名字
* @return: 文件的总长度
*/
private int countDir(String dir){
pwd = jte.getText();
path = jco2.getSelectedItem().toString();
int count=0;//文件长度变量
File dirFile=new File(dir);
if(!dirFile.exists())//如果用户输入的目录不存在
{return count;}
File[] subFile=dirFile.listFiles();
if(subFile==null)//如果列表子文件不存在
{ return  count;}
for(int i=0;i<subFile.length;i++){
String fileName=subFile[i].getAbsolutePath();
if(subFile[i].isDirectory()){
//递归计算目录下文件长度
count+=countDir(subFile[i].getAbsolutePath());
}
if(pwd.equals("")){
   if(subFile[i].isFile()){
if(fileName.endsWith(path)){
  count++;
ja.append("文件:"+fileName+"\n");
}
}
}
else if(fileName.contains(pwd)){
ja.append("文件:"+fileName+"\n");
count++;
}
}
return count;
}
}
效果图:
  • 大小: 10.1 KB
  • 大小: 27.4 KB
  • 大小: 24.1 KB
  • 大小: 26.1 KB
  • 大小: 16.7 KB
  • 大小: 500.2 KB
分享到:
评论

相关推荐

    python 实验九 文件与异常

    在Python编程语言中,文件操作和异常处理是两个至关重要的概念。它们对于任何软件开发者来说都是基础且实用的技能。本实验将引导你深入理解如何在Python中进行文件的读写操作,以及如何有效地处理程序运行时可能出现...

    文件异常处理的一个例子

    4. `FileExceptionTest.cpp` 和 `FileExceptionTest.h`:这是主程序的实现和头文件,可能包含了文件操作和异常处理的代码。 5. `StdAfx.cpp`:预编译头文件,包含常用库的引用,以提高编译效率。 6. `...

    C# 当在文件拷贝后,再接着后面操作 ,会提示文件被占用 ,导致后面的操作异常

    为了解决这个问题,我们需要理解文件操作的内部机制,并采取适当的策略来避免文件占用的问题。 首先,让我们了解文件被占用的原因。当一个进程打开文件并进行读写操作时,操作系统会为这个进程分配一个文件句柄,...

    android 异常处理机制

    异常可能发生在各种场景下,比如网络请求、文件操作、资源加载等。对于特定的异常,应使用try-catch块进行捕获和处理。例如,在网络请求中,可能需要捕获`IOException`、`JSONException`等。在`register`方法中,...

    Struts2异常处理机制

    结果类型如`dispatcher`、`stream`、`redirect`等可以与异常处理结合,根据异常类型或自定义逻辑返回不同的页面或进行其他操作。 8. **Struts2与Spring集成的异常处理** 当Struts2与Spring集成时,可以在Spring的...

    Python中的文件操作和异常处理.docx

    在Python编程中,文件操作和异常处理是两个不可或缺的核心概念。了解并熟练掌握这两个主题,可以使你的代码更加高效且易于维护。以下是对这两个概念的详细解释。 ### 文件操作 Python提供了丰富的内置函数来处理...

    c++异常处理机制详细介绍

    编译错误通常是语法错误,而运行错误通常涉及算法逻辑,如除数为0、文件操作失败等。异常处理主要关注运行错误,因为它们更难以预测和预防。 3. **异常处理基本思想**: - 异常检测与处理分离:当函数内部检测到...

    Python文件操作和异常处理.docx

    总结,Python的文件操作和异常处理是编写高效、稳定程序的关键技能。通过使用内置函数、字符串方法和数据结构,以及良好的异常处理,我们可以编写出能够处理各种情况的代码。在实际应用中,这些技能不仅适用于简单的...

    浅析JAVA异常处理机制.pdf

    异常(Exception),即程序运行过程中出现的非正常现象,例如用户输入错误、除数为零、需要处理的文件不存在、数组下标越界等情况。由于这些异常情况总是不可避免的,因此良好的应用程序除了具备基本功能外,还需要...

    JCVM异常处理机制

    - `CardException`: 智能卡环境中特定异常的基类,通常用于处理与智能卡操作相关的异常情况。 - `UserException`: 用户自定义异常的基类。 3. `RuntimeException`: 所有运行时异常类的基类。 - `...

    python学习笔记-文件与异常

    文件操作允许程序与外部数据进行交互,而异常处理则是确保程序在遇到错误时能够优雅地恢复或提供有用的反馈。这篇“Python学习笔记-文件与异常”的内容可能涵盖了这两个主题的深度探讨。 首先,让我们深入了解...

    Java语言与面向对象程序设计第16讲(异常处理,多线程和流式输入输出与文件处理)

    【Java流式输入输出与文件处理】Java的I/O流系统提供了处理数据输入和输出的能力,包括文件操作。I/O流分为字节流(处理单个字节)和字符流(处理Unicode字符)。Java的`java.io`包包含了大量用于输入输出的类。对于...

    php文件操作类.zip

    文件操作类库通常会包含错误处理机制,当文件操作失败时抛出异常,而不是简单地返回错误代码。这使得程序更具可预测性,更易于调试。 5. **性能优化** 高级文件操作类可能包括缓存机制,减少不必要的磁盘I/O,...

    Qt文件操作示例程序

    在文件操作过程中,通过计算已完成的工作量与总工作量的比例,可以实时更新进度条的状态。 3. **文件操作监控** Qt的`QFileSystemWatcher`类允许我们监视文件或目录的变化,如文件的创建、删除、重命名等。当文件...

    操作系统文件复制

    通过分析代码,我们可以看到如何将上述理论知识应用到实际的文件复制操作中,包括如何处理I/O流、如何管理内存、如何处理权限和异常等。通过编写和调试代码,学生可以更深入地理解操作系统的内部工作原理。 ...

    python深入和提高,包括异常机制、文件处理、模块使用、GUI编程、游戏开发-坦克大战

    Python的深入学习和提高涉及到多个方面,包括异常机制、文件处理、模块使用、GUI编程以及游戏开发等。具体如下: 异常机制:是Python中用于处理程序运行时错误的一种机制。它通过try和except语句来实现,其中try块...

    文件模拟系统 (操作系统实验+报告)

    7. **文件操作接口**:操作系统提供的文件操作接口,如open、read、write、close、unlink等,是用户与文件系统交互的桥梁。在模拟系统中,需要实现这些接口,处理各种可能出现的异常情况。 8. **实验报告**:实验...

    实用的php文件操作类.zip

    类库通常会包含错误处理机制,当文件操作失败时,可能会抛出自定义的异常,如`FileNotFoundException`或`FileAccessException`。开发人员可以通过捕获这些异常来处理错误。 7. **性能优化** 通过缓存文件信息,...

    操作系统实验报告-文件系统

    这将涉及文件操作的异常处理、错误检测和修复策略。通过这个实验,我们将对操作系统中的文件系统有更直观和深入的理解,同时提升C++编程能力。 总的来说,这个实验涵盖了操作系统中的核心概念,如文件I/O、文件元...

    Java异常处理机制及其在项目中的应用.pdf

    2. 文件操作:使用 Java 异常处理机制可以捕获文件操作中的错误,例如文件不存在或访问权限不足。 3. 网络通信:使用 Java 异常处理机制可以捕获网络通信中的错误,例如连接超时或数据传输错误。 Java 异常处理机制...

Global site tag (gtag.js) - Google Analytics