Java文件操作我个人认为重要的问题有:
a:如何跨平台问题
b:文件编码问题,尤其是多语言平台情况下如何正常工作。
c:文件读写效率、操作效率
d:文件加密和文件安全
e:文件快速检索,强烈建议使用lence进行文件检索及文件管理。
以下是本人做的一些整理:
一:建立文件
- File file1 = new File ("C://temp//myNote.txt");
- File file2 = new File ("/tmp/myNote.txt");
File file1 = new File ("C://temp//myNote.txt"); // in Windows 这是windows文件系统下的方法
File file2 = new File ("/tmp/myNote.txt"); // in Linux/Unix unix文件系统的方法
最安全的建立文件的方法:
- File myFile = new File("C:" + File.separator + "jdk1.5.0" + File.separator, "File.java");
-
-
- System.out.println(myFile.getName());
- System.out.println(myFile.getPath());
- System.out.println(myFile.isAbsolute());
- System.out.println(myFile.getParent());
- System.out.println(myFile.exists());
- System.out.println(myFile.isDirectory());
- System.out.println(myFile.isFile());
- System.out.println(myFile.isHidden());
- System.out.println(myFile.canRead());
- System.out.println(myFile.canWrite());
-
- File myFile_A = new File("C:" + File.separator);
- for(String s: myFile_A.list()){
- System.out.println(s);
- }
-
- File myFile_C=new File("d:/test.txt");
- System.out.println(new Date(myFile_C.lastModified()));
- myFile_C.renameTo(new File("c:/text.txt.bak"));
- myFile_C.setReadOnly();
File myFile = new File("C:" + File.separator + "jdk1.5.0" + File.separator, "File.java");
//File.separator 是文件路径符号。
System.out.println(myFile.getName());//取得文件名称的方法
System.out.println(myFile.getPath());//取得文件路径的方法
System.out.println(myFile.isAbsolute());//判断文件是否完整
System.out.println(myFile.getParent());//取得文件的根目录
System.out.println(myFile.exists());//判断文件是否存在
System.out.println(myFile.isDirectory());//判断是否是目录
System.out.println(myFile.isFile());//判断是否是文件
System.out.println(myFile.isHidden());//判断是否是隐藏文件
System.out.println(myFile.canRead());//判断是否可读
System.out.println(myFile.canWrite());//判断是否可写
File myFile_A = new File("C:" + File.separator);
for(String s: myFile_A.list()){//读取某个目录下所有文件
System.out.println(s);
}
File myFile_C=new File("d:/test.txt");
System.out.println(new Date(myFile_C.lastModified()));//最后一次编辑时间
myFile_C.renameTo(new File("c:/text.txt.bak"));//从命名
myFile_C.setReadOnly();//设置为只读
二:文件过滤方法
java提供了很好的文件过滤借口:FilenameFilter 过滤以后的文件可以用listFiles显示出来。效率还是非常高的。
- import java.io.File;
- import java.io.FilenameFilter;
- import java.util.Date;
-
-
-
-
- class FileListFilter implements FilenameFilter {
- private String name;
- private String extension;
- public FileListFilter(String name, String extension) {
- this.name = name;
- this.extension = extension;
- }
- public boolean accept(File directory, String filename) {
- boolean fileOK = true;
- if (name != null) {
- fileOK = filename.startsWith(name);
- }
- if (extension != null) {
- fileOK = filename.endsWith('.' + extension);
- }
- return fileOK;
- }
- }
import java.io.File;
import java.io.FilenameFilter;
import java.util.Date;
/**
* 文件过滤器过滤类
* @author fb
*/
class FileListFilter implements FilenameFilter {
private String name;
private String extension;
public FileListFilter(String name, String extension) {
this.name = name;
this.extension = extension;
}
public boolean accept(File directory, String filename) {
boolean fileOK = true;
if (name != null) {
fileOK = filename.startsWith(name);
}
if (extension != null) {
fileOK = filename.endsWith('.' + extension);
}
return fileOK;
}
}
测试方法:
- import java.io.File;
- import java.io.FilenameFilter;
- import java.util.Date;
-
-
-
-
- public class Run_FileListFilter {
- public static void main(String[] args) {
- File myDir = new File("d:/");
- FilenameFilter select = new FileListFilter("F", "txt");
- File[] contents = myDir.listFiles(select);
- for (File file : contents) {
- System.out.println(file + " is a " + (file.isDirectory() ? "directory" : "file")
- + " last modified on/n" + new Date(file.lastModified()));
- }
- }
- }
import java.io.File;
import java.io.FilenameFilter;
import java.util.Date;
/**
* 文件过滤器 运行函数
* @author fb
*/
public class Run_FileListFilter {
public static void main(String[] args) {
File myDir = new File("d:/");
FilenameFilter select = new FileListFilter("F", "txt");
File[] contents = myDir.listFiles(select);
for (File file : contents) {
System.out.println(file + " is a " + (file.isDirectory() ? "directory" : "file")
+ " last modified on/n" + new Date(file.lastModified()));
}
}
}
三:建立目录、文件、临时文件、删除文件或目录
- import java.io.File;
- import java.io.IOException;
-
- public class MakeDir {
-
- public static void main(String[] args) {
- File myFile=new File("D:/myFubin/");
- if(myFile.mkdir()){
- System.out.println("建立目录成功");
- }else{
- System.out.println("建立目录失败");
- }
-
- File myFile_A=new File("D:/myFubin/test/");
- if(myFile_A.mkdirs()){
- System.out.println("建立目录成功");
- }else{
- System.out.println("建立目录失败");
- }
-
- File file = new File("d://myFubin//test.txt");
- try {
- file.createNewFile();
- } catch (IOException e) {
- e.printStackTrace();
- }
-
- System.out.println(file.canRead());
-
- if(file.delete()){
-
- System.out.println("删除成功");
- }else{
- System.out.println("删除失败");
- }
-
- try {
- File tmp = File.createTempFile("foo", "tmp");
- System.out.println("刚才建立的临时文件在:" + tmp.getCanonicalPath());
- } catch (IOException e) {
- e.printStackTrace();
- }
-
-
- }
-
- }
import java.io.File;
import java.io.IOException;
public class MakeDir {
public static void main(String[] args) {
File myFile=new File("D:/myFubin/");
if(myFile.mkdir()){//单级目录
System.out.println("建立目录成功");
}else{
System.out.println("建立目录失败");
}
File myFile_A=new File("D:/myFubin/test/");
if(myFile_A.mkdirs()){//多级目录
System.out.println("建立目录成功");
}else{
System.out.println("建立目录失败");
}
File file = new File("d://myFubin//test.txt");
try {
file.createNewFile();//建立空文件
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(file.canRead());
if(file.delete()){//删除文件或删除目录
//删除文件的另外一个方法:file.deleteOnExit() 这种方法是在程序退出的时候将文件删除
System.out.println("删除成功");
}else{
System.out.println("删除失败");
}
try {
File tmp = File.createTempFile("foo", "tmp");//建立临时文件
System.out.println("刚才建立的临时文件在:" + tmp.getCanonicalPath());
} catch (IOException e) {
e.printStackTrace();
}
}
}
- import java.io.File;
-
-
-
-
- public class SpaceChecker {
-
- public static void main(String[] args) {
- File[] roots = File.listRoots();
- for (int i = 0; i < roots.length; i++) {
- System.out.println(roots[i]);
- System.out.println("Free space = " + roots[i].getFreeSpace());
- System.out.println("Usable space = " + roots[i].getUsableSpace());
- System.out.println("Total space = " + roots[i].getTotalSpace());
- System.out.println();
- }
- }
- }
import java.io.File;
/**
* @author fb www.cujava.com
* 文件操作里Java 1.6 新功能:查询磁盘空间
*/
public class SpaceChecker {
public static void main(String[] args) {
File[] roots = File.listRoots();//取得所有的根,如果是windows系统那么将取得所有的磁盘
for (int i = 0; i < roots.length; i++) {
System.out.println(roots[i]);
System.out.println("Free space = " + roots[i].getFreeSpace());
System.out.println("Usable space = " + roots[i].getUsableSpace());
System.out.println("Total space = " + roots[i].getTotalSpace());
System.out.println();
}
}
}
JAVA文件操作类和文件夹的操作代码实例,包括读取文本文件内容, 新建目录,多级目录创建,新建文件,有编码方式的文件创建, 删除文件,删除文件夹,删除指定文件夹下所有文件, 复制单个文件,复制整个文件夹的内容,移动文件,移动目录等
-
-
-
-
-
-
- public String readTxt(String filePathAndName, String encoding)
- throws IOException {
- encoding = encoding.trim();
- StringBuffer str = new StringBuffer("");
- String st = "";
- try {
- FileInputStream fs = new FileInputStream(filePathAndName);
- InputStreamReader isr;
- if (encoding.equals("")) {
- isr = new InputStreamReader(fs);
- } else {
- isr = new InputStreamReader(fs, encoding);
- }
- BufferedReader br = new BufferedReader(isr);
- try {
- String data = "";
- while ((data = br.readLine()) != null) {
- str.append(data + " ");
- }
- } catch (Exception e) {
- str.append(e.toString());
- }
- st = str.toString();
- } catch (IOException es) {
- st = "";
- }
- return st;
- }
/**
* 读取文本文件内容
* @param filePathAndName 带有完整绝对路径的文件名
* @param encoding 文本文件打开的编码方式
* @return 返回文本文件的内容
*/
public String readTxt(String filePathAndName, String encoding)
throws IOException {
encoding = encoding.trim();
StringBuffer str = new StringBuffer("");
String st = "";
try {
FileInputStream fs = new FileInputStream(filePathAndName);
InputStreamReader isr;
if (encoding.equals("")) {
isr = new InputStreamReader(fs);
} else {
isr = new InputStreamReader(fs, encoding);
}
BufferedReader br = new BufferedReader(isr);
try {
String data = "";
while ((data = br.readLine()) != null) {
str.append(data + " ");
}
} catch (Exception e) {
str.append(e.toString());
}
st = str.toString();
} catch (IOException es) {
st = "";
}
return st;
}
-
-
-
-
-
- public String createFolder(String folderPath) {
- String txt = folderPath;
- try {
- java.io.File myFilePath = new java.io.File(txt);
- txt = folderPath;
- if (!myFilePath.exists()) {
- myFilePath.mkdir();
- }
- } catch (Exception e) {
- message = "创建目录操作出错";
- }
- return txt;
- }
/**
* 新建目录
* @param folderPath 目录
* @return 返回目录创建后的路径
*/
public String createFolder(String folderPath) {
String txt = folderPath;
try {
java.io.File myFilePath = new java.io.File(txt);
txt = folderPath;
if (!myFilePath.exists()) {
myFilePath.mkdir();
}
} catch (Exception e) {
message = "创建目录操作出错";
}
return txt;
}
-
-
-
-
-
-
- public String createFolders(String folderPath, String paths) {
- String txts = folderPath;
- try {
- String txt;
- txts = folderPath;
- StringTokenizer st = new StringTokenizer(paths, "|");
- for (int i = 0; st.hasMoreTokens(); i++) {
- txt = st.nextToken().trim();
- if (txts.lastIndexOf("/") != -1) {
- txts = createFolder(txts + txt);
- } else {
- txts = createFolder(txts + txt + "/");
- }
- }
- } catch (Exception e) {
- message = "创建目录操作出错!";
- }
- return txts;
- }
/**
* 多级目录创建
* @param folderPath 准备要在本级目录下创建新目录的目录路径 例如 c:myf
* @param paths 无限级目录参数,各级目录以单数线区分 例如 a|b|c
* @return 返回创建文件后的路径 例如 c:myfa c
*/
public String createFolders(String folderPath, String paths) {
String txts = folderPath;
try {
String txt;
txts = folderPath;
StringTokenizer st = new StringTokenizer(paths, "|");
for (int i = 0; st.hasMoreTokens(); i++) {
txt = st.nextToken().trim();
if (txts.lastIndexOf("/") != -1) {
txts = createFolder(txts + txt);
} else {
txts = createFolder(txts + txt + "/");
}
}
} catch (Exception e) {
message = "创建目录操作出错!";
}
return txts;
}
-
-
-
-
-
-
- public void createFile(String filePathAndName, String fileContent) {
-
- try {
- String filePath = filePathAndName;
- filePath = filePath.toString();
- File myFilePath = new File(filePath);
- if (!myFilePath.exists()) {
- myFilePath.createNewFile();
- }
- FileWriter resultFile = new FileWriter(myFilePath);
- PrintWriter myFile = new PrintWriter(resultFile);
- String strContent = fileContent;
- myFile.println(strContent);
- myFile.close();
- resultFile.close();
- } catch (Exception e) {
- message = "创建文件操作出错";
- }
- }
/**
* 新建文件
* @param filePathAndName 文本文件完整绝对路径及文件名
* @param fileContent 文本文件内容
* @return
*/
public void createFile(String filePathAndName, String fileContent) {
try {
String filePath = filePathAndName;
filePath = filePath.toString();
File myFilePath = new File(filePath);
if (!myFilePath.exists()) {
myFilePath.createNewFile();
}
FileWriter resultFile = new FileWriter(myFilePath);
PrintWriter myFile = new PrintWriter(resultFile);
String strContent = fileContent;
myFile.println(strContent);
myFile.close();
resultFile.close();
} catch (Exception e) {
message = "创建文件操作出错";
}
}
-
-
-
-
-
-
-
- public void createFile(String filePathAndName, String fileContent,
- String encoding) {
-
- try {
- String filePath = filePathAndName;
- filePath = filePath.toString();
- File myFilePath = new File(filePath);
- if (!myFilePath.exists()) {
- myFilePath.createNewFile();
- }
- PrintWriter myFile = new PrintWriter(myFilePath, encoding);
- String strContent = fileContent;
- myFile.println(strContent);
- myFile.close();
- } catch (Exception e) {
- message = "创建文件操作出错";
- }
- }
/**
* 有编码方式的文件创建
* @param filePathAndName 文本文件完整绝对路径及文件名
* @param fileContent 文本文件内容
* @param encoding 编码方式 例如 GBK 或者 UTF-8
* @return
*/
public void createFile(String filePathAndName, String fileContent,
String encoding) {
try {
String filePath = filePathAndName;
filePath = filePath.toString();
File myFilePath = new File(filePath);
if (!myFilePath.exists()) {
myFilePath.createNewFile();
}
PrintWriter myFile = new PrintWriter(myFilePath, encoding);
String strContent = fileContent;
myFile.println(strContent);
myFile.close();
} catch (Exception e) {
message = "创建文件操作出错";
}
}
-
-
-
-
-
- public boolean delFile(String filePathAndName) {
- boolean bea = false;
- try {
- String filePath = filePathAndName;
- File myDelFile = new File(filePath);
- if (myDelFile.exists()) {
- myDelFile.delete();
- bea = true;
- } else {
- bea = false;
- message = (filePathAndName + " 删除文件操作出错");
- }
- } catch (Exception e) {
- message = e.toString();
- }
- return bea;
- }
/**
* 删除文件
* @param filePathAndName 文本文件完整绝对路径及文件名
* @return Boolean 成功删除返回true遭遇异常返回false
*/
public boolean delFile(String filePathAndName) {
boolean bea = false;
try {
String filePath = filePathAndName;
File myDelFile = new File(filePath);
if (myDelFile.exists()) {
myDelFile.delete();
bea = true;
} else {
bea = false;
message = (filePathAndName + " 删除文件操作出错");
}
} catch (Exception e) {
message = e.toString();
}
return bea;
}
-
-
-
-
-
- public void delFolder(String folderPath) {
- try {
- delAllFile(folderPath);
- String filePath = folderPath;
- filePath = filePath.toString();
- java.io.File myFilePath = new java.io.File(filePath);
- myFilePath.delete();
- } catch (Exception e) {
- message = ("删除文件夹操作出错");
- }
- }
-
-
-
-
-
-
-
-
- public boolean delAllFile(String path) {
- boolean bea = false;
- File file = new File(path);
- if (!file.exists()) {
- return bea;
- }
- if (!file.isDirectory()) {
- return bea;
- }
- String[] tempList = file.list();
- File temp = null;
- for (int i = 0; i < tempList.length; i++) {
- if (path.endsWith(File.separator)) {
- temp = new File(path + tempList[i]);
- } else {
- temp = new File(path + File.separator + tempList[i]);
- }
- if (temp.isFile()) {
- temp.delete();
- }
- if (temp.isDirectory()) {
- delAllFile(path + "/" + tempList[i]);
- delFolder(path + "/" + tempList[i]);
- bea = true;
- }
- }
- return bea;
- }
/**
* 删除文件夹
* @param folderPath 文件夹完整绝对路径
* @return
*/
public void delFolder(String folderPath) {
try {
delAllFile(folderPath); // 删除完里面所有内容
String filePath = folderPath;
filePath = filePath.toString();
java.io.File myFilePath = new java.io.File(filePath);
myFilePath.delete(); // 删除空文件夹
} catch (Exception e) {
message = ("删除文件夹操作出错");
}
}
/**
* 删除指定文件夹下所有文件
* @param path 文件夹完整绝对路径
* @return
* @return
*/
public boolean delAllFile(String path) {
boolean bea = false;
File file = new File(path);
if (!file.exists()) {
return bea;
}
if (!file.isDirectory()) {
return bea;
}
String[] tempList = file.list();
File temp = null;
for (int i = 0; i < tempList.length; i++) {
if (path.endsWith(File.separator)) {
temp = new File(path + tempList[i]);
} else {
temp = new File(path + File.separator + tempList[i]);
}
if (temp.isFile()) {
temp.delete();
}
if (temp.isDirectory()) {
delAllFile(path + "/" + tempList[i]);// 先删除文件夹里面的文件
delFolder(path + "/" + tempList[i]);// 再删除空文件夹
bea = true;
}
}
return bea;
}
-
-
-
-
-
-
- public void copyFile(String oldPathFile, String newPathFile) {
- try {
- int bytesum = 0;
- int byteread = 0;
- File oldfile = new File(oldPathFile);
- if (oldfile.exists()) {
- InputStream inStream = new FileInputStream(oldPathFile);
- FileOutputStream fs = new FileOutputStream(newPathFile);
- byte[] buffer = new byte[1444];
- while ((byteread = inStream.read(buffer)) != -1) {
- bytesum += byteread;
- System.out.println(bytesum);
- fs.write(buffer, 0, byteread);
- }
- inStream.close();
- }
- } catch (Exception e) {
- message = ("复制单个文件操作出错");
- }
- }
/**
* 复制单个文件
* @param oldPathFile 准备复制的文件源
* @param newPathFile 拷贝到新绝对路径带文件名
* @return
*/
public void copyFile(String oldPathFile, String newPathFile) {
try {
int bytesum = 0;
int byteread = 0;
File oldfile = new File(oldPathFile);
if (oldfile.exists()) { // 文件存在时
InputStream inStream = new FileInputStream(oldPathFile); // 读入原文件
FileOutputStream fs = new FileOutputStream(newPathFile);
byte[] buffer = new byte[1444];
while ((byteread = inStream.read(buffer)) != -1) {
bytesum += byteread; // 字节数 文件大小
System.out.println(bytesum);
fs.write(buffer, 0, byteread);
}
inStream.close();
}
} catch (Exception e) {
message = ("复制单个文件操作出错");
}
}
-
-
-
-
-
-
- public void copyFolder(String oldPath, String newPath) {
- try {
- new File(newPath).mkdirs();
- File a = new File(oldPath);
- String[] file = a.list();
- File temp = null;
- for (int i = 0; i < file.length; i++) {
- if (oldPath.endsWith(File.separator)) {
- temp = new File(oldPath + file[i]);
- } else {
- temp = new File(oldPath + File.separator + file[i]);
- }
- if (temp.isFile()) {
- FileInputStream input = new FileInputStream(temp);
- FileOutputStream output = new FileOutputStream(newPath
- + "/" + (temp.getName()).toString());
- byte[] b = new byte[1024 * 5];
- int len;
- while ((len = input.read(b)) != -1) {
- output.write(b, 0, len);
- }
- output.flush();
- output.close();
- input.close();
- }
- if (temp.isDirectory()) {
- copyFolder(oldPath + "/" + file[i], newPath + "/" + file[i]);
- }
- }
- } catch (Exception e) {
- message = "复制整个文件夹内容操作出错";
- }
- }
/**
* 复制整个文件夹的内容
* @param oldPath 准备拷贝的目录
* @param newPath 指定绝对路径的新目录
* @return
*/
public void copyFolder(String oldPath, String newPath) {
try {
new File(newPath).mkdirs(); // 如果文件夹不存在 则建立新文件夹
File a = new File(oldPath);
String[] file = a.list();
File temp = null;
for (int i = 0; i < file.length; i++) {
if (oldPath.endsWith(File.separator)) {
temp = new File(oldPath + file[i]);
} else {
temp = new File(oldPath + File.separator + file[i]);
}
if (temp.isFile()) {
FileInputStream input = new FileInputStream(temp);
FileOutputStream output = new FileOutputStream(newPath
+ "/" + (temp.getName()).toString());
byte[] b = new byte[1024 * 5];
int len;
while ((len = input.read(b)) != -1) {
output.write(b, 0, len);
}
output.flush();
output.close();
input.close();
}
if (temp.isDirectory()) {// 如果是子文件夹
copyFolder(oldPath + "/" + file[i], newPath + "/" + file[i]);
}
}
} catch (Exception e) {
message = "复制整个文件夹内容操作出错";
}
}
-
-
-
-
-
-
- public void moveFile(String oldPath, String newPath) {
- copyFile(oldPath, newPath);
- delFile(oldPath);
- }
/**
* 移动文件
* @param oldPath
* @param newPath
* @return
*/
public void moveFile(String oldPath, String newPath) {
copyFile(oldPath, newPath);
delFile(oldPath);
}
-
-
-
-
-
-
- public void moveFolder(String oldPath, String newPath) {
- copyFolder(oldPath, newPath);
- delFolder(oldPath);
- }