java 操作文件File类

Posted xiewenda8

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 操作文件File类相关的知识,希望对你有一定的参考价值。

File 文件类

用来将文件或者文件夹封装成为对象。 方便对文件与文件夹的属性信息进行操作。 File对象可以作为参数传递给流的构造函数。
</pre></div><div></div><h2>File 类的常用的方法。</h2><div><pre name="code" class="java">import java.io.*;
/*File类的常见方法
 1.创建。
   boolean  createNewFile();
   boolean  mkdir();创建文件夹
   boolean mkdirs();创建多级文件夹。
   
 2.删除。
   boolean delete();
   void  deleteOnExit();在程序退出时删除文件。
  
 3.判断。
     boolean canExcute(); 判断是否可执行
     boolean exists(); 文件事是否存在。
     isFile();文件
     isDirectory();文件夹
     isHidden();//java能得到文件中的隐藏文件但是对隐藏文件时不能访问的
     isAbsolute();//绝对路径即时不存在也能得到。
 4.获取信息。
     getName();
     getPath();
     getParent();
     
     getAbsolutePath();
     long lastModified();
     long length();
 
 */
public class FileDemo 

	/**
	 * @param args
	 */
	public static void main(String[] args)throws IOException 
		// TODO Auto-generated method stub
          method_4();
	
	  public static void method_1() throws IOException
   		  File f= new File("d:\\\\file.txt");
   		  f.deleteOnExit();//告诉程序当程序结束时才删除f关联的文件 即使发生异常也不受影响
   		//System.out.println("creat:"+f.createNewFile());
   		 System.out.println("delete:"+f.delete());
		  
	  
	  public static void method_2()
		   File  f = new File("file.txt");
		  // System.out.println("execute:"+f.canExecute());
		  // System.out.println("exists:"+f.exists());
		   //创建文件夹
		   File dir = new File("d:\\\\abc");
		   File dirs = new File("d:\\\\abc\\\\a\\\\b\\\\c");
		    System.out.println("dir:"+dir.mkdir());
		    System.out.println("dirs:"+dirs.mkdirs());
	  
	  public static void method_3()
		  File f = new File("file.txt");
		  System.out.println("path:"+f.getPath());
		  System.out.println("absolutePath:"+f.getAbsolutePath());
		  System.out.println("parentpath:"+f.getParent());//该方法返回的是绝对路径中文件的父目录。如获取的是相对路径返回的是null。
		                                                   // 如果相对路径中有上一层目录那么该目录就是返回结果。
	  
	  public static void method_4()
		  File f1= new File("d:\\\\a.txt");
		  File f2= new File("haha.txt");
		  System.out.println(f2.renameTo(f1));//类似于剪切功能
	  
     public static void consMethod()
    	 //将a.txt封装成file对象,可以将已有的和为出现的文件或者文件夹封装为对象。
          File f1 = new File("d:\\\\a.txt");
          
          File f2 = new File("d:\\\\abc","b.txt");
          File d = new  File("d:\\\\abc");
          File f3= new File(d,"a.txt");
          System.out.println("f1:"+f1);
          System.out.println("f2:"+f2);
          System.out.println("f3:"+f3);
          //跨平台分隔符<span style="font-family: Arial, Helvetica, sans-serif;">File.separator</span>
          File f4 = new File("d:"+File.separator+"abc"+File.separator+"a.txt");
          System.out.println("f4:"+f4);
        		  
     

获取系统根目录例子

import java.io.*;
public class FileDemo2 

	/**
	 * @param args
	 */
	public static void main(String[] args) 
		// TODO Auto-generated method stub
          listDemo();
	
	
	public static void listDemo()
		 File f = new File("d:\\\\");
		 String[] names= f.list();//调用list方法的对象必须封装一个目录,封装文件返回为null
		 for(String name : names)
			 System.out.println(name);
		 
	
    public static void listRootsDemo()
    	File[] files=File.listRoots();
    	
    	for(File f: files)
    	
    		System.out.println(f);
    	
    

递归输出文件列表

import java.io.*;
/*
 列出指定目录下的文件或文件夹,包含子目录中的内容。
 也就是列出指定目录下所有内容。
 
 递归注意
 
 1 注意要有结束
 
 2 要注意递归的次数 防止内存溢出
 */

public class FileDemo3 

	/**
	 * @param args
	 */
	public static void main(String[] args) 
		// TODO Auto-generated method stub
		  File  f= new File("d:\\\\u盘备份");
             showDir(f,0);
		   //System.out.println(getSum(10));
	
	
	   public  static String getLevel(int level)
	   
		    StringBuilder sb= new StringBuilder();
		    for(int i=0; i<level;i++)
		    	sb.append(" ");
		    
		    sb.append("|--");
		   return sb.toString();
	   
     public static void showDir(File dir ,int level)
         
    	 System.out.println(getLevel(level)+dir.getName());
          level++;
    	  File[] files= dir.listFiles();
    	  for(int i=0;i<files.length;i++)
    	  
    		  if(files[i].isDirectory())
    			  showDir(files[i],level);
    		  else
    			  System.out.println(getLevel(level)+files[i]);
    	  
    	  
       
     
     //补充:递归方法求和 
     public static int getSum(int num)
		 if(num==1)
			 return 1;
		 else return num+getSum(--num);
	  

删除文件夹实例

import java.io.*;
/*
 * 删除文件夹要先删除里边的文件。因此就要用到递归了
 * 从里往外删除文件
 * 
 */
public class FileRemoveDir 

	/**
	 * @param args
	 */
	public static void main(String[] args) 
		// TODO Auto-generated method stub
         File file= new File("d:\\\\abc");
         removeDir(file);
	
     public static void removeDir(File dir)
     
    	 File[] files =dir.listFiles();
    	 for(int i=0;i<files.length;i++)
    	 
    		 if(files[i].isDirectory())
    		 
    			 removeDir(files[i]);
    		 else
    			 System.out.println(files[i].toString()+"file:"+files[i].delete());
    	 
    	 System.out.println(dir+"dir:"+dir.delete());
     

查找文件夹指定类型保存在文件中

import java.io.*;
import java.util.*;
/*
 将一个指定目录下的java文件的绝对路径,存储到一个文件中。
 建立一个java文件列表清单。
 
 思路:
 1.对指定的目录进行递归。
 2.获取递归过程所有的java文件的路径。
 3.将这些路径存储到集合中。
 4.将集合中的数据写入到一个中。
 
 * */
public class JavaFileList 

	/**
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException 
		// TODO Auto-generated method stub
		File dir = new File("d:\\\\u盘备份");
		List<File> list= new ArrayList<File>();
		fileToList(dir,list);
        File f =new File("javaList.txt"); 
         writeToFile(list,f);
	
    public static void fileToList(File dir,List<File> list)
    
    	File[] files = dir.listFiles();
    	for (File file : files)
    		if(file.isDirectory())
    		
    			fileToList(file,list);
    		
    		else
    		
    			if(file.getName().endsWith(".java"))
    				list.add(file);
    		
    		
    	
    
    public static void writeToFile(List<File> List, File f) throws IOException
    
    	BufferedWriter bw= new BufferedWriter(new FileWriter(f));
    	try
    		for(File file: List)
    		
    			String path= file.getAbsolutePath();
    			bw.write(path);
    			bw.newLine();
    			bw.flush();
    			
    		
    	catch(Exception e)
    		throw new RuntimeException("失败!");
    	
    	finally
    		try
    			if(bw!=null)
    				bw.close();
    		catch(Exception ex)
    			throw new RuntimeException("关闭失败!");
    		
    	
    	
    

Propreties与流关联的集合类HashTable的子类

import java.io.*;
import java.util.*;
public class PropertiesDemo 

	/**
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException 
		// TODO Auto-generated method stub
                    //setAndget();
		//method_1();
		loadDemo();
	
	//load方法进行文件的集合加载。
	public static void loadDemo() throws IOException
	
		FileInputStream fis= new FileInputStream("info.txt");
		Properties prop= new Properties();
		prop.load(fis);
		prop.list(System.out);
		prop.setProperty("wangwu","25");
		FileOutputStream fos= new FileOutputStream("info.txt");
		prop.store(fos, "haha");
	
	//将info.txt中的键值数据存到集合中进行操作。
	/*步骤:
	 1.用一个流和info.txt文件关联。
	 2.读取一行数据,将该数据用"="进行切割。
	 3.等号左边为建,右边卫值。存入Porperties集合中即可.
	 */
	public static void method_1() throws IOException
	
	BufferedReader br= new BufferedReader(new FileReader("info.txt"));
	String line=null;
	Properties prop= new Properties();
	while((line=br.readLine())!=null)
	
		String[] s=line.split("=");
		prop.setProperty(s[0], s[1]);
	
	System.out.println(prop);
	
	//设置和获取元素
	public static void setAndget()
	
		Properties prop = new Properties();
		prop.setProperty("zhangsan", "34");
		prop.setProperty("lisi", "22");
		System.out.println(prop);
		String value =prop.getProperty("zhangsan");
		System.out.println(value);
		Set<String>  names = prop.stringPropertyNames();
		for(String name:names)
		
			System.out.println(prop.getProperty(name));
		
	

Properties实现程序的使用次数限制

/*用于记录应用程序的次数。
  如果使用次数已到,那么给出注册信息。
  
    思路:
    通过Properties属性文件将使用次数的属性存在此文件中,每次使用一次将计数
    属性修改并重新存到属性文件中,此操作就要借用Properties对象进行操作。
 属性文件用于键值对的存储方式。
 这样便于对数据操作。
 
 键值对是map集合
 数据是以文件的形式存储,使用io数据。
 */
import java.io.*;
import java.util.*;
public class PropertiesCount 

	/**
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException 
		// TODO Auto-generated method stub
         Properties prop = new Properties();
          File file= new File("count.ini");
          if(!file.exists())
        	  file.createNewFile();
         FileInputStream fis = new FileInputStream(file);
         prop.load(fis);
         int count=0;
         String value= prop.getProperty("time");
         if(value!=null)
         
        	 count =Integer.parseInt(value);
        	 if(count>=5)
        	 
        		 System.out.println("您好,使用次数已到请付费");
        		 return;
        	 
         
         count++;
         prop.setProperty("time",count+"");
         FileOutputStream fos = new FileOutputStream(file);
         prop.store(fos,"haha");
	
      

PrintStream与PrintWriter 打印流的用法

/*打印流
 为了方便各种数据类型的原样打印。
 
 字节打印流
 PrintStream
 可以接收的参数类型
 1.file对象 File
 2.字符串路径。String
 3.字节输出流 OutputStream

  PrintWriter
 可以接收的参数类型
 1.file对象 File
 2.字符串路径。String
 3.字节输出流 OutputStream
 4.字符输出流 Writer

 */
import java.io.*;
public class PrintStreamDemo 

	/**
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException 
		// TODO Auto-generated method stub
              BufferedReader bufr=
            		  new BufferedReader(new InputStreamReader(System.in));
              PrintWriter out = new PrintWriter(System.out);
              String line = null;
              while((line=bufr.readLine())!=null)
              
            	  out.println(line.toUpperCase());
            	  out.flush();
              
              out.close();
              bufr.close();<pre name="code" class="java">
 
   
 
   
  
   

DataInputStream和DataOutputStream 基本数据操作流

import java.io.*;
/*
 DataStream类主要用于操作基本数据类型的流的读取和写入
 */
public class DataInputStreamDemo 

	/**
	 * @param args
	 * @throws Exception 
	 */
	public static void main(String[] args) throws Exception 
		// TODO Auto-generated method stub
         //writeData();
		//readData();
		writeUTFDemo();
	
	public static void writeUTFDemo() throws IOException
	
		 DataOutputStream dos =
				   new DataOutputStream(new FileOutputStream("data.txt"));
		 dos.writeUTF("你好");
		 dos.close();
	
	public static void readData() throws Exception
	
		DataInputStream dis = new DataInputStream(new FileInputStream("data.txt"));
		int num =dis.readInt();
		boolean b= dis.readBoolean();
		double d= dis.readDouble();
		System.out.println("num:"+num);
		System.out.println("b:"+b);
		System.out.println("d:"+d);
	
   public static void writeData() throws IOException
   
	   DataOutputStream dos =
			   new DataOutputStream(new FileOutputStream("data.txt"));
	   dos.writeInt(234);
	   dos.writeBoolean(true);
	   dos.writeDouble(444.456);
	   dos.close();
	   
   


ObjectInputStream和ObjectOutputStream对象操作流

import java.io.*;
public class ObjectStreamDemo 

	/**
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws Exception 
		// TODO Auto-generated method stub
            writeObj();
	      readObj();
	
	public static void readObj() throws IOException, IOException, ClassNotFoundException
	
	  ObjectInputStream ois = new ObjectInputStream(new FileInputStream("obj.txt"));
	  Person p =(Person)ois.readObject();
	  System.out.println(p);
	  ois.close();
	  
	
	public static void writeObj() throws IOException, IOException
	
		ObjectOutputStream oos=
				new ObjectOutputStream(new FileOutputStream("obj.txt"));
		oos.writeObject(new Person("lisi",39,"china"));
		oos.close();
	
   

     class Person implements Serializable
     
    	 /**
		 * 自定义
		 */
		private static final long serialVersionUID = 1L;
		private String name;
    	transient int age;//关键字transient定义的成员也不能被序列化 在堆内存中也无法被序列化
    	static String country="cr" ;//静态成员不能被序列化,不再堆内存中
    	 
    	 Person(String name ,int age,String country)
    		 this.name=name;
    		 this.age=age;
    		 this.country=country;
    	 
    	 public String toString()
    		 return name+":"+age+country;
    	 
     

PipedInputStream 和PipedOutputStream 管道操作流

import java.io.*;
public class PipedStreamDemo 

	/**
	 * @param args
	 * @throws Exception 
	 */
	public static void main(String[] args) throws Exception 
		// TODO Auto-generated method stub
       PipedInputStream pis= new PipedInputStream();
       PipedOutputStream pos= new PipedOutputStream();
       pis.connect(pos);
       
       PipedRead read = new PipedRead(pis);
       PipedWrite write = new PipedWrite(pos);
       new Thread(read).start();
       new Thread(write).start();
       
	



class PipedRead implements Runnable

   private PipedInputStream in;
   PipedRead(PipedInputStream i)
   
  	 this.in=i;
   
	@Override
	public void run() 
		// TODO Auto-generated method stub
		try
		   byte[] buf = new byte[1024];
			int len=in.read(buf);
			String s = new String(buf,0,len);
			System.out.println(s);
			in.close();
		catch(Exception e)
		
			throw new RuntimeException("读取失败");
		
	

   class PipedWrite implements Runnable
	 private  PipedOutputStream pos;
	   PipedWrite(PipedOutputStream out)
		   this.pos= out;
	   
	@Override
	public void run() 
		// TODO Auto-generated method stub
		try
		 
			Thread.sleep(6000);
			pos.write("ge men lai le".getBytes());
			pos.close();
		catch(Exception e)
		
			throw new RuntimeException("写入流失败!");
		
	
	   
   


RondomAccessFile 随机文件读写流

import java.io.*;
/*RandomAccessFile
  该类不是IO体系中的子类
  而是直接继承Object
  
  但是他是IO包中的成员,因为它具有读写数据的功能。
  内部封装了一个数组,而且通过指针对数据元素进行操作。
  可以通过getFilePointer 获取指针的位置。
  同时可以通过seek方法改变指针的位置。
  
  其实就是内部封装了字节输入流和输出流。
  
  通过其拥有的构造函数可以看出,该类只能操作文件。
  而且操作文件还有固定的模式。只读 r 读写rw
  
  如果是只读模式去操作文件,读取已有的文件入如果问价不存在就会报错。
  如果是读写,如果没有文件会创建一个文件在写入。
  
 */
public class RandomAccessFileDemo 

	/**
	 * @param args
	 * @throws Exception 
	 */
	public static void main(String[] args) throws Exception 
		// TODO Auto-generated method stub
             writeFile();
		    readFile();
	
	public static void readFile() throws IOException
	
	   RandomAccessFile raf = new RandomAccessFile("random.txt","r");
	 //seek方法的使用很频繁 将读取文件中的指针调整位置读取数据
	   raf.seek(8*3);//跳过开头的8个字节开始读取数据。
	   
	   byte[] buf = new byte[4];
	   raf.read(buf);
	   String name = new String(buf);
	   int  age= raf.readInt();
	   System.out.println("name:"+name);
	   System.out.println("age:"+age);
	   raf.close();
			   
	
    public static void writeFile() throws IOException
    
    	RandomAccessFile  raf = new RandomAccessFile("random.txt","rw");
    	raf.write("李四".getBytes());
    	//raf.write(97);//write 方法是写入最低八位的二进制形式。
    	raf.writeInt(97);//writeInt()方法是写入四个字节不会出现乱码。
    	raf.write("王五".getBytes());
    	raf.writeInt(99);
    	raf.seek(8*3);//跳过一个8字节写入数据
    	raf.write("周七".getBytes());
    	raf.writeInt(98);
    	raf.close();
    
    
    






以上是关于java 操作文件File类的主要内容,如果未能解决你的问题,请参考以下文章

Java中File文件操作类的详细使用介绍

java 操作文件File类

Java File类(转载笔记)

java之文件操作

Java常用类--File类讲解

3.Java文件操作