Java本地文件操作

来源:互联网 发布:linux自动挂载分区 编辑:程序博客网 时间:2024/06/16 14:52

概述:Java本地文件操作,涉及到文件/文件夹的创建,文件/文件夹属性的读取与设置,文件/文件夹的重命名,目录结构的遍历,以及文件内容的读取与写入。

File属于java.io.File

---在Eclipse的大纲视图界面(Outline)中有绿色点的是用public修饰的方法,黄色代表protected方法,蓝色代表包方法,红色代表private方法

---------------------------------------------------------------------------------------------------------------------------------------------

File类常用的方法:

构造方法:
File(String)
File(String,String)
File(File,String)
File(URI)
其他:
getName():String获取文件名
getParent():String获取上一级文件的路径
getParentFile():File返回父级文件
getPath():String获取文件的路径
isAbsolute():boolean判断是否为绝对路径
getAbsolutePath():String获取绝对路径
getAbsoluteFile():File获取绝对路径的File对象
toURL():URL转化为URL
toURI():URI转化为URI
canRead():boolean判断是否可读
canWrite():boolean判断是否可写
exists():boolean判断文件是否存在
isDirectory():boolean判断是否是一个文件夹
isFile():boolean判断是否是文件
isHidden():boolean判断文件是否隐藏
length():long得到文件的长度
createNewFile():boolean将File对象创建为一个真正的文件
delete():boolean删除文件
deleteOnExit():void当程序退出时删除文件
list():String[]列出文件(名称)
listFiles():File[]列出文件的列表
mkdir():boolean创建文件夹
mkdirs():boolean创建多级文件夹
renameTo(File):boolean将文件重命名
setReadOnly():boolean将文件设置为只读
setWritable(boolean):boolean将文件设置为可写
canExecute():boolean判断文件是否在当前操作系统中可执行
createTempFile(String,String,File):File创建临时文件
compareTo():int文件的对比

----------------------------------------------------------------------------------------------------------------------------------------

注意:File对象既可以指代一个文件,也可以指代一个文件夹,实际上File对象更像是表示文件或文件夹的路径。
   创建File对象时传入文件名称(带后缀名)如果没有指定路径的话,那么文件会默认为当前项目的根目录下。
   在填写File构造方法中参数的相对路径时,一定不要以"/"开头。
     ../代表上一级文件夹,也就是工程项目的上一级。../../代表上一级的上一级,两级向上跳转,“./”代表当前目录。

----------------------------------------------------------------------------------------------------------------------------------------

renameTo方法的效果更像是一种文件的移动,将文件移动到指定路径的同时进行文件名的变更,但是值得注意的是,

renameTo方法必须在同一分区中进行,比如windows系统中的不同盘区,跨盘区执行renameTo方法就是不允许的。而linux系统就不会收这个限制。

如果非要进行跨区的文件移动,就需要用拷贝的相关方法,而不是文件的重命名。

-------------------------------------------------------------------------------------------------------------------------------------------

在删除文件夹的时候,此文件夹必须是空文件夹,否则不能被删除。

---------------------------------------------------------------------------------------------------------

常用的文件属性读取:
File file = new File("test.txt");
//判断文件是否存在
file.exists()
//读取文件名称
file.getName()//这里注意:获取到的文件名一定是前面Java声明的file对象的名字
//读取文件路径
file.getPath()//相对路径
//读取文件绝对路径
file.getAbsolutePath()
//读取文件父级路径
new File(file.getAbsolutePath).getParent()//注意,因为file对象是通过
相对路径进行构造的,因此,在调用getParent()方法时会返回null,因此我们
需要获取到file的绝对路径之后,才可以获取到file的父级路径。
//读取文件大小
file.length()//返回值是long型的数值,是字节(byte)
//判断文件是否被隐藏。
file.isHidden()
//判断文件是否可读
file.canRead()
//判断文件是否可写
file.canWrite()
//判断是否为文件夹
file.isDirectory()

------------------------------------------------------------------------------------------------------------------------

package crc16test;import java.io.File;public class Scannner {public static void main(String[] args) {printFiles(new File("../crc-16"), 1);}/** * 文件打印 * @param dir * @param tab 文件缩进 */public static void printFiles(File dir, int tab) {//这种打印方式,可以输出系统的隐藏文件if (dir.isDirectory()) {File next[] = dir.listFiles();for (int i = 0; i < next.length; i++) {for (int j = 0; j < tab; j++) {System.out.print("|--");}System.out.println(next[i].getName());if (next[i].isDirectory()) {printFiles(next[i], tab + 1);}}}}}
输出结果:
|--.classpath|--.project|--.settings|--|--org.eclipse.core.resources.prefs|--|--org.eclipse.jdt.core.prefs|--bin|--|--crc16test|--|--|--Converters.class|--|--|--CRC.class|--|--|--Crc16.class|--|--|--HelloFile.class|--|--|--MyOuter$MyInner.class|--|--|--MyOuter.class|--|--|--ReadAndWriteFile.class|--|--|--room.html|--|--|--Scannner.class|--|--|--SetProperty.class|--|--|--Solution.class|--|--|--sss.txt|--json.jar|--newFile.txt|--src|--|--crc16test|--|--|--Converters.java|--|--|--CRC.java|--|--|--Crc16.java|--|--|--HelloFile.java|--|--|--MyOuter.java|--|--|--ReadAndWriteFile.java|--|--|--room.html|--|--|--Scannner.java|--|--|--SetProperty.java|--|--|--Solution.java|--|--|--sss.txt|--text.txt
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
package crc16test;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 ReadAndWriteFile {public static void main(String[] args) {File file = new File("text.txt");/* 文件的输入 */if (file.exists()) {System.err.println("exist");try {// 1.创建一个文件输入流FileInputStream fis = new FileInputStream(file);// 2.创建文件输入流的Reader/** * InputStreamReader有多个构造器,但是因为FileInputStream是字节输入流, * 而InputStreamReader是字符输入流,因此在调用构造器时,我们选择带有字符编码的 * 构造器,否则会出现乱码。另外注意,文件默认为GBK编码,在创建文件的时候应当先设置好字符 * 编码为UTF-8,这样好统一前后的编码。 */InputStreamReader isr = new InputStreamReader(fis, "UTF-8");// 3.创建一个带有缓冲的输入流BufferedReader br = new BufferedReader(isr);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();}} else {System.err.println("THE FILE DOES NOT EXIST");}/* 文件的输出 *///文件的输出不必担心文件是否存在的问题,因为程序会自动进行文件的创建File newFile = new File("newFile.txt");try {FileOutputStream fos = new FileOutputStream(newFile);OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");BufferedWriter bw = new BufferedWriter(osw);// 注意,这种写入方式,是覆盖性的。bw.write("123\n");bw.write("456\n");bw.close();osw.close();fos.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (UnsupportedEncodingException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}System.out.println("写入完成。");}}

输出结果:

exist长恨歌一二三四五六,一二三四五六。六五四三二一,六五四三二一。一二三四五六,一二三四五六。六五四三二一,六五四三二一。写入完成。