文件和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
????AudioInputStream,?ByteArrayInputStream,?FileInputStream,?FilterInputStream,?InputStream,?ObjectInputStream,?PipedInputStream,?SequenceInputStream,?StringBufferInputStream
八.流的分布
????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;}@Overridepublic 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-->