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类讲解

File类与IO流

JAVA基础知识之IO-File类

Class类getResource方法获取文件路径

Java File类创建目录文件

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