文件和IO流的小结

一.文件的操作:  新建、删除、查找、修改

二.三种不同格式的创建文件对象的方法(构造器)

File(File parent, String child) 

          根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。 

File(String pathname) 

          通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。 

File(String parent, String child) 

          根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。 

File(URI uri) 

          通过将给定的 file: URI 转换为一个抽象路径名来创建一个新的 File 实例 

三.常用方法:

boolean exists() 

          测试此抽象路径名表示的文件或目录是否存在。 

boolean delete() 

          删除此抽象路径名表示的文件或目录。          

boolean createNewFile() 

          当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。 

File getAbsoluteFile() 

          返回此抽象路径名的绝对路径名形式。 

String getAbsolutePath() 

          返回此抽象路径名的绝对路径名字符串。 

 File getCanonicalFile() 

          返回此抽象路径名的规范形式。 

String getCanonicalPath() 

          返回此抽象路径名的规范路径名字符串。 String getName() 

          返回由此抽象路径名表示的文件或目录的名称。 

String getParent() 

          返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返 

          回null。        

File getParentFile() 

          返回此抽象路径名父目录的抽象路径名;如果此路径名没有指定父目录,则返回  

          Null。 

String getPath() 

          将此抽象路径名转换为一个路径名字符串。 

boolean isAbsolute() 

          测试此抽象路径名是否为绝对路径名。 

boolean isDirectory() 

          测试此抽象路径名表示的文件是否是一个目录。 

boolean isFile() 

          测试此抽象路径名表示的文件是否是一个标准文件。 

long length() 

          返回由此抽象路径名表示的文件的长度。 

String[] list() 

          返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目 
          录。

File[] listFiles() 

          返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。 

static File[] listRoots() 

          列出可用的文件系统根。 

 boolean mkdir() 

          创建此抽象路径名指定的目录。 

 boolean mkdirs() 

          创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。 

          

四.File类的用途:

     操作系统中的文件:新建、删除、查找、修改

     文件:相对路径和绝对路径

            相对路径:new imagine(“imagine.gif”)-----src是同一级的

                       /imagine是src的子目录       ../imagine是?

                        (是UNIX 平台上的吧···)

            绝对路径 :只要带上盘符就是

     不同的操作系统分隔符会不同,使用通用的常量实现

五.文件搜索器(见下面的代码)      

六..流的概念

输入和输出的抽象

入口:从文件中把数据读出来,读到网络、终端、控制台

出口:从控制台,网络、终端、控制台将数据写入到文件中

七.流的继承体系

所在的包:java.io

    AudioInputStreamByteArrayInputStreamFileInputStreamFilterInputStreamInputStreamObjectInputStreamPipedInputStreamSequenceInputStreamStringBufferInputStream

八.流的分布

    1、字节流:

    FileInputStream

    FileOutputStream

    特征:1.直接连接到数据源

       2.一个字节在源文件,OS内存,VM内存读入或读出玩了之后再读下一个字节

       3. 最小读取单位是byte

    

   2、 过滤流(缓冲流):

    BufferedInputStream

    BufferedOutputStream

    

    

    3、数据类型流:

    DataInputStream

    DataOutputStream

    

    4、对象流:(只要是对象就要将其进行序列化)

    ObjectInputStream

    ObjectOutputStream

    文件:字符和二进制文件(字节)              

package lc.File0725;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Insets;
import java.awt.Rectangle;
import java.io.File;
import java.util.ArrayList;

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

public class FileTest extends JFrame{

	public static ArrayList<String> s = new ArrayList<String>();
	
	public static void main(String[] args) {
		FileTest test = new FileTest();
		test.init();
	}

	//初始化窗体
	private void init(){
		//基本设置
		this.setTitle("文件搜索器");
		this.setSize(550, 400);
		this.setDefaultCloseOperation(3);
		this.setResizable(false);
		this.setLocationRelativeTo(null);
		this.setLayout(new BorderLayout());
		//添加组件
		JToolBar tool = new JToolBar();
		tool.setLayout(null);
		//tool.setBounds(0, 0, 450, 100);
		
		
		this.add(tool,BorderLayout.NORTH);
		//tool.setSize(450, 100);
		tool.setPreferredSize(new Dimension(550, 70));
		//this.add(tool, 3);
		JLabel label1 = new JLabel("请输入你要搜索的文件名或文件夹名:");
		JTextField text1 = new JTextField(20);
		JLabel label2 = new JLabel("搜索范围:");
		JTextField text2 = new JTextField(20);
		//String[] s = {"","C:\\","D:\\","G:\\","H:\\"};
		valueInit();
		JComboBox box = new JComboBox(s.toArray());
		box.setEditable(true);
		
		JButton button1 = new JButton("搜索");
		JButton button2 = new JButton("浏览");
		tool.add(label1);
		label1.setBounds(20, 3, 230, 30);
		tool.add(text1);
		text1.setBounds(255, 3, 150, 30);
		tool.add(button1);
		button1.setBounds(410, 3, 60, 30);
		tool.add(label2);
		label2.setBounds(150, 35, 100, 30);
		tool.add(box);
		box.setBounds(255,35,150,30);
		tool.add(button2);
		button2.setBounds(410, 35, 60, 30);
		JTextArea ja =new JTextArea(18,20);
		ja.setMargin(new Insets(5, 5, 5, 5));
		ja.setEditable(false);
		JScrollPane js = new JScrollPane(ja);
		js.setBackground(Color.green);
		//this.add(js,BorderLayout.EAST);
		this.add(js,BorderLayout.CENTER);
		this.setVisible(true);
		BottonListener lb = new BottonListener(text1,ja,box,this);
		button1.addActionListener(lb);
		button2.addActionListener(lb);
	}
	
	//初始化下拉框的数组值
	public void valueInit(){
		File[] temFiles = File.listRoots();
		for(int i=0;i<temFiles.length;i++){
			s.add(temFiles[i].getAbsolutePath());
		}
	}
	
	
}

 

package lc.File0725;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;

import javax.swing.JComboBox;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class BottonListener implements ActionListener{

	private JTextField text1;
	private JTextField text2;
	private JTextArea ja;
	JComboBox box;
	JFileChooser chooser = new JFileChooser();
	FileTest jf;
	
	
	//构造方法
	public BottonListener(JTextField text1,JTextArea ja,JComboBox box,FileTest jf){
		this.text1 = text1;
		this.box = box;
		this.ja = ja;
		this.jf = jf;
	}
	@Override
	public void actionPerformed(ActionEvent e){
		//只能选择文件选择器里面的目录文件,不能选择真是文件!
		chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
		if("浏览".equals(e.getActionCommand())){
			System.out.println("点击浏览按钮!");
			int value = chooser.showOpenDialog(jf);
			if(value==chooser.APPROVE_OPTION){
				//box.setName(chooser.getSelectedFile().getAbsolutePath()); 
				box.addItem(chooser.getSelectedFile().getAbsolutePath());
				box.setSelectedItem(chooser.getSelectedFile().getAbsolutePath());
			}
		}else if("搜索".equals(e.getActionCommand())){
			String s1 = text1.getText();
			String s2 =(String) box.getSelectedItem();
			System.out.println("s2的值:"+s2);
			if(s1.equals("")){
				//System.out.println("请输入文件名");
				JOptionPane.showMessageDialog(null, "请输入文件名或文件夹名!");
			}else{
				int sum = search(s1, s2);
				ja.append("所搜索到的相关内容个数为:"+sum+"\n");
			}
		}
		//System.out.println("====");
		
		//ja.append(s1);
		//System.out.println(s1);
		//JOptionPane.showMessageDialog(null, "请输入文件名或文件夹名!");
		//String s2 = "H:\\保存包";
		
	}

	//搜索的方法
	private int search(String s1,String s2){
		//System.out.println("++++++");
		File[] subFile;
		int count=0;
		String path = null;
		if(s2.equals("")){
			System.out.println("从整个磁盘上查找!");
			subFile = File.listRoots();
		}else{
			File temFile2 = new File(s2);
			//列表目录
			subFile = temFile2.listFiles();
		}
		//做判断
		//是空目录或文件
		if(null==subFile||subFile.length==0){
			//return null;
			//ja.append("没有搜索到相关文件"+"\n");
			return 0;
		}else{
			for(int i=0;i<subFile.length;i++){
					if(subFile[i].isFile()){
						path = subFile[i].getName();
						if(path.startsWith(s1)){
							ja.append("文件名:"+subFile[i].getAbsolutePath()+"\n");
							count++;
						}
					}else if(subFile[i].isDirectory()){
						path = subFile[i].getName();
						if(path.startsWith(s1)){
							ja.append("目录名:"+subFile[i].getAbsolutePath()+"\n");
							count++;
						}
						count+=search(s1, subFile[i].getAbsolutePath());
					}
			}
		}
	 return count;
	}

}

 

<!--EndFragment-->
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值