Java本地文件操作

xiaoxiao2021-02-27  149

概述: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转化为URLtoURI():URI转化为URIcanRead():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 长恨歌 一二三四五六,一二三四五六。 六五四三二一,六五四三二一。 一二三四五六,一二三四五六。 六五四三二一,六五四三二一。 写入完成。

转载请注明原文地址: https://www.6miu.com/read-14027.html

最新回复(0)