范例11-1:文件基本操作。任意给定一个文件路径,如果文件不存在则创建一个新的文件,如果文件存在则将文件删除。



package com.yootk.demo;
import java.io.File;
public class TestDemo {
    public static void main(String[] args) throws Exception {         // 此处直接抛出
        File file = new File("d:\\test.txt");                                     // 设置文件的路径
        if (file.exists()) {                                                                        // 判断文件是否存在
           file.delete();                                                                  // 删除文件
        } else {                                                                                     // 文件不存在
           System.out.println(file.createNewFile());                    // 创建新文件
        }
    }
}

如果给定的路径为根路径,则文件可以直接利用createNewFile()方法进行创建;如果创建的文件存在目录将无法创建。所以先判断(getParent()取得父路径)是否存在,如果不存在应该先创建根目录(mkdirs()),然后在创建文件;

import java.io.*;
public class testClass {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		File file = new File("e:" + File.separator + "demo" + File.separator + "hello" + File.separator + "yootk"+
		File.separator + "test.txt"); //设置文件的路径
		if(!file.getParentFile().exists()) {
			file.getParentFile().mkdirs(); //判断不存在,就创建父路径
		}
		System.out.println(file.createNewFile());//创建文件路径后再创建文件夹;
	}

}

判断文件的各种属性:

import java.io.*;
import java.math.*;
import java.text.*;
import java.util.*;

public class testClass {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		File file = new File("e:" + File.separator + "demo" + File.separator + "my.jpg"); //设置文件的路径
		if(file.exists()) {
			System.out.println("是否是文件 : " + (file.isFile()));
			System.out.println("是否是目录: " + (file.isDirectory()));
			System.out.println("文件大小: " + (new BigDecimal((double)file.length()/1024/1024).divide(new BigDecimal(1), 2, BigDecimal.ROUND_HALF_UP)) + "M");
			System.out.println("上次修改时间 : " + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(file.lastModified())));
		}
	}

}

查看文件夹内中的目录信息:

import java.io.*;
import java.math.*;
import java.text.*;
import java.util.*;

public class testClass {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		File file = new File("c:"+File.separator);
		if(file.isDirectory()) {
			File result[] = file.listFiles();
			for(int i=0; i<result.length; i++) { //输出文件夹中的目录信息
				System.out.println(result[i]);
			}
		}
	}

}

11-5: 列出制定目录下的所有的文件以及子目录信息:这个使用递归调用的方法,来解决每一个目录下可能还有下一级目录,下一级可能还有别的目录;


import java.io.*;
import java.math.*;
import java.text.*;
import java.util.*;

public class testClass {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		File file = new File("e:" + File.separator); //定义操作路径
		print(file);
	}
		/**
		 * 列出目录结构,此方法采用递归
		 */
		
		public static void print(File file) {
			if(file.isDirectory()) { //判断是否为目录
				File result[] = file.listFiles(); //列出子目录
				if(result != null) {
					for(int x=0; x<result.length; x++) {
						print(result[x]);  //递归调用
					}
				}
			
		}
		System.out.println(file);
	}

	

}

自动执行close()操作:

import java.io.*;
import java.math.*;
import java.text.*;
import java.util.*;


class Net implements AutoCloseable{
	public void close() throws Exception{
		System.out.println("*** 网络资源自动关闭,释放资源");
	}
	public void info() throws Exception{//假设有异常抛出
		System.out.println("*** 欢迎访问:www.baidu.com");
	}
}
public class testClass {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		try(Net n = new Net()){
			n.info();
		} catch(Exception e) {
			e.printStackTrace();
		}
	}
	
}

文件内容的输出;

import java.io.*;
import java.math.*;
import java.text.*;
import java.util.*;



public class testClass {

	public static void main(String[] args) throws Exception{
		// TODO Auto-generated method stub
		File file = new File("d:" + File.separator + "demo" + File.separator + "king.txt");
		
		if(!file.getParentFile().exists()) { //判断文件是否存在
			file.getParentFile().mkdirs();// 创建目录
		}
		//使用OutputStream和其子类进行对象实例化,也就是使用outputStream对象将byte写入到文件中,然后需要关闭资源操作
		//此时目录存在文件不存在
		OutputStream output = new FileOutputStream(file);
		//字节输出流需要使用byte类型,需要将String类对象变为字节数组
		String str = "刘钊是一个大傻子";
		
		byte data[] = str.getBytes();
		output.write(data); //写入内容
		output.close(); //关闭资源操作
		
	}
	
}

数据的读取操作:

import java.io.*;
import java.math.*;
import java.text.*;
import java.util.*;



public class testClass {

	public static void main(String[] args) throws Exception{
		// TODO Auto-generated method stub
		File file = new File("d:" + File.separator + "demo" + File.separator + "king.txt");
		
		if(file.exists()) {
			InputStream input = new FileInputStream(file);
			byte data[] = new byte[1024];
			int len = input.read(data); //读取数据放入到字节数组中
			input.close(); //关闭输入流
			
			//将读取出来的字节数组数据变为字符串进行输出
			System.out.println(new String(data,0,len));
			
		}
		
	}
	
}

采用while循环实现输入流操作:read()方法读数据,如果没有数据流了,将返回-1;


import java.io.*;
import java.math.*;
import java.text.*;
import java.util.*;



public class testClass {

	public static void main(String[] args) throws Exception{
		// TODO Auto-generated method stub
		File file = new File("d:" + File.separator + "demo" + File.separator + "king.txt");
		
		if(file.exists()) {
			InputStream input = new FileInputStream(file);
			byte data[] = new byte[1024];
			int temp = 0;
			int foot = 0; 
			
			while((temp = input.read()) != -1) { //判断是否还有输入流
				data[foot++] = (byte)temp;
			}
			
			input.close(); //关闭输入流
			//将读取出来的字节数组数据变为字符串进行输出
			System.out.println(new String(data,0,foot));
			
		}
		
	}
	
}

使用writer实现内容的输出:

import java.io.*;
import java.math.*;
import java.text.*;
import java.util.*;



public class testClass {

	public static void main(String[] args) throws Exception{
		// TODO Auto-generated method stub
		File file = new File("d:" + File.separator + "demo" + File.separator + "king.txt");
		
		if(!file.getParentFile().exists()) { //如果不存在这个目录,创建这个目录
			file.getParentFile().mkdirs();
		}
		 Writer out = new FileWriter(file);
		 
		 String str = "kingone95 is java Engineer!";
		 out.write(str); //输出字符串数据
		 out.close(); //关闭输入流
	}
	
}

使用Reader读取数据

import java.io.*;
import java.math.*;
import java.text.*;
import java.util.*;



public class testClass {

	public static void main(String[] args) throws Exception{
		// TODO Auto-generated method stub
		File file = new File("d:" + File.separator + "demo" + File.separator + "king.txt");
		
		if(file.exists()) {
			Reader in = new FileReader(file); //为Reader类进行对象实例化
			char data[] = new char[1024];
			int len = in.read(data); //进行数据读取
			in.close();
			
			System.out.println(new String(data,0,len));
		}
	}
	
}

强制清空字符流缓冲区。

import java.io.*;
import java.math.*;
import java.text.*;
import java.util.*;



public class testClass {

	public static void main(String[] args) throws Exception{
		// TODO Auto-generated method stub
		File file = new File("d:" + File.separator + "demo" + File.separator + "king.txt");
		
		if(!file.getParentFile().exists()) { //判断目录是否存在
			file.getParentFile().mkdirs();
		}
		
		Writer out = new FileWriter(file);
		String str = "kingone is a engineer!";
		out.write(str);   //将数据输出到文件中;
		
		out.flush(); //	强制刷新缓冲区
	}
	
}

实现输出流的转换:

import java.io.*;
import java.math.*;
import java.text.*;
import java.util.*;



public class testClass {

	public static void main(String[] args) throws Exception{
		// TODO Auto-generated method stub
		File file = new File("d:" + File.separator + "demo" + File.separator + "king.txt");
		
		if(!file.getParentFile().exists()) {
			file.getParentFile().mkdirs();
		}
		OutputStream output = new FileOutputStream(file);
		 //将OutputStream对象传递给OutputStreamWriter的构造函数,想上转型为Writer;
		Writer out = new OutputStreamWriter(output);
		
		out.write("kingone95 is a engineer!"); //向文件中输出数据
		out.flush();
		out.close();
	}
	
}

实现文件复制操作:

import java.io.*;
import java.math.*;
import java.text.*;
import java.util.*;



public class testClass {

	public static void main(String[] args) throws Exception{
		// TODO Auto-generated method stub
		long start = System.currentTimeMillis(); //取得开始复制的时间
		if(args.length != 2) {
			System.out.println("命令执行错误!");
			System.exit(1); //程序退出
		}
		 //如果输入参数正确,应该进行原文件的有效性验证
		File inFile = new File(args[0]);  //第一个为源文件的路径
		if(!inFile.exists()) {
			System.out.println("源文件不存在,请确认执行路径");
			System.exit(1);
		}
		
		//如果此时源文件正确,就需要定义输出文件,同时需要考虑输出文件有目录
		File outFile = new File(args[1]);
		if(!outFile.getParentFile().exists()) {
			outFile.getParentFile().mkdirs();
		}
		 //实现文件内容的复制分别定义输出流与输入流对象
		InputStream input = new FileInputStream(inFile);
		OutputStream output = new FileOutputStream(outFile);
		
		int temp = 0;
		byte data[] = new byte[1024];
		while((temp = input.read(data)) != -1) {
			output.write(data, 0, temp);
		}
		input.close();
		output.close();
		long end = System.currentTimeMillis();
		System.out.println("复制所花费的时间: " + (end = start));
	}
}