范例11-1:文件基本操作。任意给定一个文件路径,如果文件不存在则创建一个新的文件,如果文件存在则将文件删除。
|
如果给定的路径为根路径,则文件可以直接利用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));
}
}