本博文主要介绍JAVA文件编程,主要包括通过JDK提供的I/O来从文件读取和写入数据、字节流读写文件的方法、字符流读写文件的方法、如何使用File类创建、删除和遍历文件与目录等操作。
不管是C/C++还是JAVA,都可能生成一些持久性数据,我们可以将数据存储在文件或数据库中,但是对于一些简单性的数据,如果存储在数据库中,则会显得有点得不偿失了,那么,如何在JAVA中将数据存储在文件中就成了中小型程序必须掌握的基本技能了。
下面一一讲解File类简介与文件的创建、删除、重命名,文件夹的创建、重命名、删除,文件属性的读取,文件属性的设置,遍历文件夹,文件的简单读写,并且都给出示例代码。
主要内容包括File类,File类用来代表文件或文件夹,通过File类,可以对文件与文件夹执行丰富的操作,并且可以获取文件的路径、大小、文件名等信息;通过文件类的creatNewFile()方法创建文件,通过delete()方法删除文件,使用renameTo()方法重命名文件。
import java.io.File;
import java.io.IOException;
public class HelloFile {
public static void main(String[] args) {
// TODO Auto-generated method stub
File file = new File("hello.txt"); //默认存在相对路径下,即该工程下
// File file = new File("bin/hello.txt"); //文件存在于指定的绝对路径下
// File file = new File("../hello.txt"); //文件存在于该工程路径的上一级
// File file = new File("../../hello.txt"); //文件存在于该工程路径的上一级的上一级
//判断文件是否存在
if(file.exists())
{
//打印“文件”属性
System.out.println(file.isFile());
//打印“路径(文件夹)”属性
System.out.println(file.isDirectory());
// //同目录重命名
// File nameto = new File("NewHello.txt");
// file.renameTo(nameto);
// //跨目录重命名
// //注意1:文件夹结构必须处于同一个分区
// //注意2:文件若处于不同的分区,需要使用文件的拷贝,而不是重命名
// File nameto = new File("src/NewHello.txt");
// file.renameTo(nameto);
// //删除文件
// file.delete();
// System.out.println("文件删除成功!");
}
else
{
System.out.println("文件不存在!");
try {
file.createNewFile();
System.out.println("文件已经成功创建!");
} catch (IOException e) {
System.out.println("文件无法创建!");
}
}
}
}
主要内容包括通过使用mkdir()与mkdirs()方法创建文件夹,使用delete()方法删除文件夹,使用renameTo()方法重命名文件夹
import java.io.File;
public class HelloFolder {
public static void main(String[] args) {
//创建单级文件夹:folder.mkdir()
File folder1 = new File("MyFolder1");
// if(folder1.mkdir())
// {
// System.out.println("单级文件夹创建完成!");
// }
// else
// {
// if(folder1.exists())
// {
// System.out.println("单级文件夹已经存在,不用创建!");
// }
// else
// {
// System.out.println("单级文件夹创建失败!");
// }
// }
//创建多级文件夹:folder.mkdirs()
File folder2 = new File("MyFolder2/one/two");
// if(folder2.mkdirs())
// {
// System.out.println("多级文件夹创建完成!");
// }
// else
// {
// if(folder2.exists())
// {
// System.out.println("多级文件夹已经存在,不用创建!");
// }
// else
// {
// System.out.println("多级文件夹创建失败!");
// }
// }
// //文件夹重命名
// //重命名同一级文件夹
// File newfolder1 =new File("MyFolder3");
// if(folder1.renameTo(newfolder1))
// {
// System.out.println("Done!");
// }else{
// System.out.println("Fail!");
// }
// //重命名不同级的文件夹,有点类似于移动,但仍归类于重命名
// //注意:处于同一分区中
// File newfolder2 =new File("MyFolder2/two");
// if(folder2.renameTo(newfolder2))
// {
// System.out.println("Done!");
// }else{
// System.out.println("Fail!");
// }
//删除文件夹
if(folder1.delete())
{
System.out.println("删除完成!");
}else{
System.out.println("删除失败!");
}
// //注意:只能删除空文件夹
// folder2.delete();
}
}
主要内容包括判断文件是否存在、文件名称、路径、文件大小、是否被隐藏、是否可读可写、是否为文件夹等。
import java.io.File;
public class ReadFileProperty {
public static void main(String[] args) {
File file = new File("text.txt");
//判断文件是否存在
System.out.println("文件是否存在"+file.exists());
//读文件名称
System.out.println("读取文件名称"+file.getName());
//读取文件路径(相对路径)
System.out.println("读取文件相对路径"+file.getPath());
//读取绝对路径
System.out.println("读取文件绝对路径"+file.getAbsolutePath());
//读取文件父级路径
System.out.println("读取文件父级路径"+file.getParent());//返回相对路径的上一级
System.out.println("读取文件父级路径"+ new File(file.getAbsolutePath()).getParent());//返回绝对路径的上一级
//读取文件大小
System.out.println("读取文件大小"+file.length()+"byte");
System.out.println("读取文件大小"+(float)file.length()/1000+"KB");
//判断文件是否被隐藏
System.out.println("判断文件是否被隐藏"+file.isHidden());
//判断文件是否可读
System.out.println("判断文件是否可读"+file.canRead());
//判断文件是否可写
System.out.println("判断文件是否可写"+file.canWrite());
//判断文件是否为文件夹
System.out.println("判断文件是否为文件夹"+file.isDirectory());
}
}
主要内容包括将文件设定为可读、可写或只读。
import java.io.File;
import java.io.IOException;
public class SetFileProperty {
public static void main(String[] args) {
File file = new File("text.file");
if(file.exists())
{
System.out.println("文件存在,不用创建!");
//先确认文件的属性
System.out.println("可读吗?"+file.canRead());
System.out.println("可写吗?"+file.canWrite());
System.out.println("可执行吗?"+file.canExecute());
//将文件设定为可写
// file.setWritable(false);//true可写false不可写
//将文件设定为可读
// file.setReadable(false);//true可读false不可读
//将文件设定为只读
file.setReadOnly();
//再确认文件的属性
System.out.println("\n");
System.out.println("可读吗?"+file.canRead());
System.out.println("可写吗?"+file.canWrite());
System.out.println("可执行吗?"+file.canExecute());
}else{
System.out.println("文件不存在,请创建一个新文件!");
try {
file.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
主要内容包括通过使用listFiles()方法获取文件夹中的所有项目,并且通过递归显示完整的层级结构。
package com.hqu.filetraverse.main;
import java.io.File;
public class Traverse {
public static void main(String[] args) {
printFiles(new File("/Job/Java/workspace/FileTraverse"),1);//使用绝对路径
// printFiles(new File("../FileTraverse"),1);//默认使用相对路径
}
public static void printFiles(File dir,int tab) {
if(dir.isDirectory())
{
File next[] = dir.listFiles(); //返回值是文件和文件夹,存在于数组中
for(int i=0;i
主要内容包括FileInputStream和FileOutputStream的使用方法,实现文本文件的读取和写出。
package com.hqu.rwfile;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
public class ReadFile {
public static void main(String[] args) {
File file = new File("text.txt"); //事先创建好,并输入内容
if(file.exists()){
// System.out.println("exit");
System.err.println("exit");//系统输出
try {
//准备用于文件输入的三个流
FileInputStream fis = new FileInputStream(file);//文件的输入流属于字节流
InputStreamReader isr = new InputStreamReader(fis, "UTF-8");//InputStreamReader属于字符流,"UTF-8"为指定文本编码,防止乱码
BufferedReader br = new BufferedReader(isr);//带有缓冲区的Reader
String line; //用于临时存放读取到的数据
while((line = br.readLine()) != null){
System.out.println(line);
}
//关闭输入流
br.close();
isr.close();
fis.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
File newfile = new File("newtext.txt");//无需创建,写入时系统自动创建文件
try {
FileOutputStream fos = new FileOutputStream(newfile);
OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");
BufferedWriter bw = new BufferedWriter(osw);
bw.write("abcd\n");
bw.write("efgh\n");
bw.write("ijkl\n");
bw.write("mnop");
// bw.write("长歌行 汉乐府");
// bw.write("青青园中葵,朝露待日晞。\n");
// bw.write("阳春布德泽,万物生光辉。\n");
// bw.write("常恐秋节至,焜黄华叶衰。\n");
// bw.write("百川东到海,何时复西归?\n");
// bw.write("少壮不努力,老大徒伤悲!\n");
bw.close();
osw.close();
fos.close();
System.out.println("写入完成!");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}