`
bearsorry
  • 浏览: 93590 次
  • 性别: Icon_minigender_2
  • 来自: 湖南
社区版块
存档分类
最新评论

文件和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是同一级的

                       /imaginesrc的子目录       ../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-->
分享到:
评论

相关推荐

    JAVA IO流小结

    JAVA IO流小结 JAVA IO流是指Java语言中用来实现输入/输出操作的机制。IO流是指任何有能力产出数据的数据源对象或者有能力接收数据的数据源对象。他屏蔽了实际的I/O设备处理数据的细节。 一、流的定义和分类 流是...

    Java学习IO流小结--字符流

    ### Java学习IO流小结——字符流 #### 知识点概述 在Java中,处理文件和数据流是一项基本而重要的任务。IO流是Java语言中处理输入/输出的重要工具,它包括字节流和字符流两大类。本文将重点讨论字符流的相关概念...

    文件IO编程总结

    文件输入输出(File Input/Output,简称文件IO)是计算机编程中的基础操作,尤其是在系统级编程和应用开发中不可或缺。本文将围绕“文件IO编程”这一主题,详细讲解相关知识点,帮助初学者快速掌握文件IO的基本概念...

    java流IO总结

    ### Java IO流详解 #### 一、概述 Java的I/O操作主要涉及使用Java语言进行输入和输出操作。Java的所有I/O机制都是基于数据流来进行输入输出,这些数据流表示了字符或字节数据的流动序列。理解Java的I/O模型对于...

    Java 中IO流字符流详解及实例

    Java 中IO流字符流详解及实例 Java 中的 IO 流字符流是指 Java 语言中对基本输入/输出流的扩展,用于处理字符流。字符流是指将文本文件或字符串按照某种编码方案(如 UTF-8、UTF-16BE、GBK 等)序列化为字节序列的...

    Java中IO流详解

    Java中IO流详解 Java中IO流详解是指Java语言中负责输入输出操作的类库,主要...小结:Java中IO流详解是一个复杂的知识点,包括字节流、字符流和转换流等几个方面。了解Java中IO流的工作原理和使用方法是非常重要的。

    java文件(File)小结.doc

    【文件(File)小结】 在Java编程中,文件(File)是数据持久化存储的重要方式,它不同于内存中临时存储的数据。File类是Java.io包中的核心类,提供了对文件和目录的操作。通过File对象,我们可以进行创建、删除、...

    文件读写操作小结

    本文将结合标题“文件读写操作小结”和提供的标签“源码”、“工具”,深入探讨文件读写的核心概念、常见方法以及在实际应用中的注意事项。 1. 文件系统基础 文件系统是操作系统用于组织和管理磁盘上数据的一种方式...

    Java IO流 File类的常用API实例

    Java IO流 File类是Java语言中用于操作文件和目录的基本类之一,提供了丰富的API实例来操作文件和目录。在本节中,我们将详细介绍Java IO流 File类的常用API实例。 一、File类的基本方法 1. 构造方法:`File...

    2024码表IO流-字节流-HM

    ##### 1.4 字符集小结 通过对ASCII码表、GBK字符集和Unicode字符集的理解,我们可以总结以下几点: - **ASCII码表**:包含基本的英文字符,每个字符使用一个字节编码。 - **GBK字符集**:主要用于中文字符的编码,...

    Java中的缓冲流——学习小结

    缓冲流基于IO流,在IO流中使用。顾名思义,它是一个缓冲内存,即在对外部设备中的文件进行读写操作时,先创建一定内存,然后再在这部分内存中读写数据,读写完成后再统一访问该设备。使用缓冲流减少了对外部硬盘的...

    小结Node.js中非阻塞IO和事件循环

    非阻塞IO模型指的是当进行IO操作(如网络请求、文件读写)时,程序不会在等待IO操作完成的过程中停止运行,而是会立即继续执行后续代码。这与传统的阻塞IO模型相对,后者在进行IO操作时,如果数据尚未准备好,程序会...

    ASPNET文件处理

    #### 小结 ASP.NET通过.NET Framework提供的文件处理类库为开发者提供了强大的文件操作功能。熟练掌握这些类的使用方法,可以极大地提升Web应用程序的功能性和灵活性。无论是基本的文件读写,还是更复杂的文件管理...

    java写入文件操作的几种方法

    小结 Java 中提供了多种写入文件的方法,每种方法都有其特点和应用场景。FileWriter 和 BufferedWriter 是两种常用的写入文件方法,前者可以将字符串或字符数组写入文件中,而后者可以将字符串、数组或字符数据写入...

    java基础知识从业必备知识点结构图小结.rar

    这个"java基础知识从业必备知识点结构图小结.rar"压缩包文件,通过图像化的方式,帮助初学者和从业者快速概览Java的主要知识点,并提供了进一步学习的方向。无论是初入Java殿堂的新手,还是需要巩固基础的开发者,都...

    java文件操作详细介绍

    #### 三、小结 Java中的文件操作主要依赖于`File`类以及各种流类。`File`类提供了文件的基本属性访问和简单管理功能,而流类则负责具体的读写操作。通过合理利用这些类,开发者可以高效地完成文件操作任务。 #### ...

    Java I/O编程 java

    8. 数据流小结: 在Java I/O编程中,理解不同类型的流及其用途至关重要。字节流和字符流分别处理二进制和文本数据,过滤流提供了额外的功能,管道流实现了线程间的通信,对象流使得对象可以持久化。掌握这些基础,...

Global site tag (gtag.js) - Google Analytics