文件操作与异常总结

文件操作与异常总结
一、文件的概念
通过创建File类的对象,调用File类中的方法,实现文件的创建、删除、查找等功能。
1)文件名
文件全名包括文件的路径名和扩展名,一般讲的文件名是只带扩展名的。
2)相对路径与绝对路径
不以路径分隔符开头的文件路径叫做相对路径。以根目录开头的文件路径叫做绝对路径。
3)分隔符
WIN平台上为“\”,LIUNX平台上为“/”。
二、文件操作
1)File类的构造方法及格式
<1>File(File parent,String child)
在一个父文件(目录)对象下创建一个名字为child的文件对象
<2>File(String pathname) 最常用
创建一个指向pathname名字的File对象
<3>File(String parent,String child)
以一个名为parent字符串作为父目录名,创建一个指向名为child文件的文件对象。
2)File类的重要方法
<1>Boolean exists() 判断File对象指向的文件是否存在
<2>String getName() 得到文件名字(不带路径的名字)
<3>Boolean isDirectory() 判断File对象指向的文件是否为目录
<4>Boolean isFile() 判断File对象指向的文件是否为真实文件
<5>long length() 得到File对象指向文件的长度,以byte计,指向目录则返回0
<6>File[] listFiles() 将File对象指向的文件下一级的所有目录和真实文件作为一个数组返回。
例如: File[] f=file.listFiles();
<7>static File[] listRoots() 将电脑上的磁盘作为一个数组返回。
例如: File[] f=File.listRoots();
<8>boolean mkdir() 根据File对象名(即路径),创建目录。仅可创建一级目录。
<9>boolean mkdirs() 如果File对象名(即路径)有多级目录,可一次性创建。
<10>boolean delete() 删除对象所指向的文件
<11>boolean creatNewFile() 根据对象名字在磁盘上创建一个新的真实文件。已有同名文件则覆盖,同名目录则抛出异常。
三、异常处理
(1)什么叫异常
异常是指可能由外部系统导致程序出错的原因。
异常在JAVA中被设计成了一个java.lang包下的类---Exception类。所以当程序出现异常的时候,我们就可以在代码中得到一个Exception对象。
(2)如何处理
方法一:对于可能发生异常的代码,我们把它放到try catch块中。
例如:
try{
tempFile.creatNewFile();
}catch(Exception ef){
ef.printStackTrace();//打印出错原因}
如果try成功,则不执行catch,如果失败则获取Exception对象,并打印出错原因。
方法二:对于可能发生异常的方法,我们在定义方法时,用throws关键字声明方法可能抛出异常。
例如:
public void testCreateAndDelete(String fileName)throws Exception{


课后实践:完成一个文件搜索小程序
源代码:
public class Mange {

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

}
public class ButtonListener implements ActionListener{
private JComboBox jcb;
private JComboBox jcb1;
private JTextField jtf;
private JTextArea jta;

//用构造函数将组件传入
public ButtonListener(JComboBox jcb, JTextField jtf, JComboBox jcb1,
JTextArea jta) {
this.jcb=jcb;
this.jtf=jtf;
this.jcb1=jcb1;
this.jta=jta;
}

public void actionPerformed(ActionEvent arg0) {
//获取下拉框和输入框的内容
String pan=jcb.getSelectedItem().toString();
String name=jtf.getText();
String extension=jcb1.getSelectedItem().toString();

//创建线程对象
SearchFiles sf=new SearchFiles(pan,name,extension,jta);
sf.start();//启动线程

}
}
public class SearchFiles extends Thread{
private JTextArea jta;
String pan=" ";
String name=" ";
String extension=" ";
public SearchFiles(String pan, String name, String extension,
JTextArea jta) {
this.jta=jta;
this.pan=pan;
this.name=name;
this.extension=extension;
}
public void run(){
int fileCount=0;//文件总数
String fileName=" ";//用来存储文件全名
fileName=name+extension;
jta.setText("已开始查找..."+"\n");
fileCount=printDir(pan,fileName);
jta.setText("文件位置为");
jta.setText("文件总数为"+fileCount);
}
//打印目录下的文件名
private int printDir(String pan, String fileName) {
int fileCount=0;
File dirFile=new File(pan);//直接文件
File[] subFile=dirFile.listFiles();//直接文件中的所有文件传入数组
if(subFile==null||dirFile.length()==0){
return 0;
}
//遍历文件
for(int i=0;i<subFile.length;i++){
if(subFile[i].isDirectory()){//如果是目录
String subDir=subFile[i].getAbsolutePath();
String s=jta.getText();
jta.setText(s+"目录"+subDir+"\n");
fileCount+=printDir(subDir,fileName);//递归
}
if(subFile[i].isFile()){
if(subFile[i].getName().equals(fileName)){
fileCount++;
}
String fileName1=subFile[i].getAbsolutePath();
String s=jta.getText();
jta.setText(s+"文件"+fileName1+"\n");
}
}
return fileCount;
}
}
public class SearchFrame extends JFrame{
/**
*
*/
private static final long serialVersionUID = 1L;
/**
* @param args
*/
private static JComboBox jcb;
private static JComboBox jcb1;
private static JTextField jtf;
private static JTextArea jta;

public void initGUI() {
//设置窗体属性
this.setTitle("文件统计");
this.setSize(600, 400);
this.setLocation(200, 100);
this.setDefaultCloseOperation(3);
this.setBackground(Color.WHITE);

//创建北部面板
JPanel northPane=new JPanel();
//设置面板布局
FlowLayout fl=new FlowLayout();
northPane.setLayout(fl);
northPane.setBackground(Color.WHITE);
//实例化一个标签对象
JLabel jla=new JLabel("路径:");
northPane.add(jla);//添加标签至面板
//实例化一个下拉框对象
jcb=new JComboBox(new String[]{"c:/","d:/","e:/"});//简化后的代码
jcb.setEditable(true);//设置可编辑
jcb.setPreferredSize(new Dimension(120,25));//设置大小,用绝对布局精确设置大小
northPane.add(jcb);//添加下拉框组件至面板
//实例化一个标签对象
JLabel jla1=new JLabel("文件名:");
northPane.add(jla1);//添加标签至面板
//实例化一个输入框
jtf=new JTextField();
jtf.setPreferredSize(new Dimension(120,25));
northPane.add(jtf);
//实例化一个标签对象
JLabel jla2=new JLabel("扩展名:");
northPane.add(jla2);//添加标签至面板
//实例化一个下拉框对象
jcb1=new JComboBox();
jcb1.addItem(".mp3");//添加选择内容
jcb1.addItem(".jpg");
jcb1.addItem(".exe");
jcb1.setEditable(true);//设置可编辑
jcb1.setPreferredSize(new Dimension(100,25));//设置大小,用绝对布局精确设置大小
northPane.add(jcb1);//添加下拉框组件至面板


//创建中部面板
JPanel centerPane=new JPanel();
centerPane.setBackground(Color.WHITE);
//实例化一个显示纯文本的多行区域(支持滚动)
jta=new JTextArea();
//不需要设置文本框大小jta.setPreferredSize(new Dimension (550,300));
JScrollPane jsp=new JScrollPane(jta);//向JTextArea添加滚动条
jsp.setPreferredSize(new Dimension (550,300));//直接设置滚动条范围
jsp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);//竖直滚动条
jsp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);//水平滚动条
centerPane.add(jsp);

//实例化一个按钮
JButton jb=new JButton("Go");
northPane.add(jb);
//创建按钮的监听器对象
ButtonListener bl=new ButtonListener(jcb,jtf,jcb1,jta);
//将监听器添加至按钮
jb.addActionListener(bl);

this.add(centerPane,BorderLayout.CENTER);//添加中部面板值窗体
this.add(northPane,BorderLayout.NORTH);//添加北部面板值窗体
this.setVisible(true);//设置可见
}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值