文件操作——File
来源:互联网 发布:联合国维和行动 知乎 编辑:程序博客网 时间:2024/06/11 15:57
File
1.学习File之前,最好了解一些关于内存的知识(CPU,内存,硬盘)
2.Java API (java.io.File)支持访问硬盘文件
File基础学习
1.java.io.File:该类用于描述文件系统中的一个文件或目录。
File可以
1.访问文件或目录的属性信息**
- (1.)获取文件或目录名- (2.)获取文件长度(字节)- (3.)最后修改时间
代码案例:
public class FileDemo1{ public static void main(String[] args){ /* *路径尽量不写绝对路径,常用的是使用相对路径; *1.相对于项目目录(当前目录) *2.相对于类加载目录(实际开发更常用) */ //File file = new File("./test.txt");当前项目目录 File file = new File("."+File.separator+"test.txt"); /* *获取当前文件的属性信息 */ //获取文件或目录名 String name = file.getName(); System.out.println(name); //获取文件长度(字节) long length = file.length(); System.out.println("length:"+length+"字节"); //最后修改时间 long time = file.lastModified(); //System.out.println(time); Date date = new Date(time); SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd,H:m:s"); System.out.println("最后修改时间"+sdf.format(date)); } /* * 可读,可写,可运行 */ file.canRead(); file.canExcute(); boolean canWrite = file.canWrite(); System.out.println("只读:"+canWrite); boolean isHidden = file.isHidden() System.out.println("隐藏:"+isHidden);}
2.访问一个目录中的所有子项**
代码案例:
/** * 获取一个目录的所有子项 */ public class FileDemo7{ public static void main(String[] args){ /* * 获取当前目录下的所有内容 */ File dir = new File("."); /* * boolean isFile() * 判断当前File对象表示的是否为一个文件 * * boolean isDirectory() * 判断是否表示的是一个目录 */ if(dir.isDirectory()){ File[] subs = dir.listFiles(); for(File sub:subs){ if(sub.isFile()){ System.out.print("文件:"); }else{ System.out.print("目录:"); } System.out.println(sub.getName()); } } } }/** * 获取一个目录中的部分子项,File支持一个 * 重载的listFiles方法,要求传入一个文件 * 过滤器,这样只会返回该目录中满足该过滤器 * 要求的子项。 */ public class FileDemo8{ public static void main(String[] args){ /* * 仅获取当前目录的全部文件 */ File dir = new File("."); MyFilter filter = new MyFilter(); File[] subs = dir.listFiles(filter); for(File sub:subs){ System.out.println(sub.getName()); } } }class MyFilter implements File{ public boolean accept(File file){ System.out.println("正在过滤:"+file.getName()); return file.isFile(); }}
3.操作文件或目录(创建,删除)**
代码案例(文件的创建,删除):
/** * 使用File创建文件 */ public class FileDemo2{ public static void main(String[] args)throws IOException /* * 在当前目录下创建demo.txt文件 * 不写"./" 默认就是在当前目录下 */ File file = new File("demo.txt"); /* * 判断File表示的文件或目录是否真实存在 */ if(!file.exists()){ file.createNewFile(); System.out.println("创建完毕"); }else{ System.out.println("改文件已经存在"); }}/** * 删除文件 */public class FileDemo3{ public static void main(String[] args){ /* * 将当前目录中的demo.txt文件删除 */ File file = new File("demo.txt"); if(file.exists()){ file.delete(); System.out.println("删除成功"); }else{ System.out.println("不存在此文件"); } }}
代码案例(目录的创建,删除):
/** * 创建一个目录 */ public class FileDemo4{ /* * 在当前目录下创建目录demo */ public static void main(String[] args){ File dir = new File("demo"); if(!dir.exists()){ dir.mkdir(); System.out.println("创建完毕"); }else{ System.out.println("该目录已经存在!"); } }} /** * 常见多级目录 */ public class FileDemo5{ public static void main(String[] args){ /* * 在当前目录下创建a/b/c/d/e/f目录 */ File file = new File( "a"+File.separator+ "b"+File.separator+ "c"+File.separator+ "d"+File.separator+ "e"+File.separator+ "f" ); if(!dir.exits()){ /* * 该方法会将所有不存在的父目录一同创建出来 */ dir.mkdirs(); System.out.println("创建成功!"); }else{ System.out.println("该目录已经存在"); } }}/** * 删除目录 */ public class FileDemo6(){ public static void main(String[] args){ File dir = new File("demo"); if(dir.exists){ /* * 删除目录要求该目录必须是一个空目录 */ dir.delete(); System.out.println("删除完毕!"); } } }/** * 定义一个方法,可以删除指定的文件或者目录 */ public class Test{ public static void main(String[] args){ File dir = new File("a");//这里的a是一个多层的目录 delete(dir); }/** * 将给定的File表示的文件或目录删除 */public static void delete(File file){ if(file.isDirectory()){ File[] subs= file.listFiles(); for(File sub:subs){ delete(sub); } file.delete(); }}
注意:File不可以访问文件数据
RandomAccessFile
代码案例:
/** * java.io.RandomAccessFile 用于读写文件数据。 * 其基于指针对文件进行读写。创建RandomAccessFile有两种常用模式: * 1."r",即只读模式,仅对文件数据进行读写操作。 * 2."rw",即读写模式,对文件数据可以编辑。 */public static void main(String[] args)throws IOException{ /* * RandomAccessFile(File f,String mode) * RandomAccessFile(String path,String mode); */ RandomAccessFile raf = new RandomAccessFile("raf.dat","rw"); /* * void write(int d) * 写出一个字节,写出的是该整数对应的二进制中的"低八位" * vvvvvvvv * 00000000 00000000 00000000 00000001 */ //char a = '1'; //ind d = (int)a; //System.out.println(d); //raf.write(49); raf.write(97);//a raf.write(98);//b raf.write(99);//c /* * raf.dat中的文件数据有三个字节了,内容为: * 01100001 01100010 01100011 */ /* * 读写完毕后关闭raf */ raf.close(); }---**读取字节**public class RandomAccessFileDemo2{ public static void main(String[] args)throws IOException{ RandomAccessFile raf = new RandAccessFile("raf.dat","r"); /* * int read() * 从文件中指针当前位置读取该字节,并以10进制的数组形式返回。 * 若返回值为-1,则表示读取到了文件末尾。 */ int d = raf.read(); System.out.println(d);//97 d = raf.read(); System.out.println(d);//98 d = raf.read(); System.out.println(d);//99 d = raf.read(); System.out.println(d);//-1 raf.close(); }}---**读写基本类型数据**/** * RandomAccessFile 读写基本类型数据以及基于指针的读写操作 */ public class RandomAccessFileDemo3{ public static void main(String[] args){ /* * RAF总是在指针当前位置进行读写字节,并且无论进行了读 * 还是写一个字节后,指针都会自动向后移动到下一个字节的 * 位置。 * 默认创建出来RAF时,指针的位置为0,即:文本的第一个 * 字节的位置。 */ //获取当前指针的位置 long pos = raf.getFilePointer(); System.out.println("pos:"+pos); /* * 写入一个int最大值 * 01111111 11111111 11111111 11111111 */ int imax = Integer.MAX_VALUE; System.out.println(imax); raf.write(imax>>>24); System.out.println("pos:"+raf.getFilePointer()); raf.write(imax>>>16); raf.write(imax>>>8); raf.write(imax); /* * 一次写出4个字节,将int值写出 */ System.out.println("pos:"+raf.getFilePointer()); raf.writeInt(imax); raf.writeLong(123L); raf.writeDouble(123.123); System.out.println("写出完毕!"); /* * void seek(long pos) * 将指针移动到指定位置 */ //将指针移动到文件开始出 raf.seek(0); System.out.println("pos:"+raf.getFilePointer());//0 /* * int readInt() * 连续读取4个字节,并且转换为对应的int值返回,若在读取的4个字节的 * 过程中 读取到文件末尾,则会抛出EOFException */ int max = raf.readInt(); System.out.println(max); System.out.println("pos:"+raf.getFilePointer());//4 //读取double raf.seek(16); double d = raf.readDouble(); System.out.println(d); System.out.println("pos:"+raf.getFilePointer()); //读取long raf.seek(8); long l = raf.readLong(); System.out.println(l); raf.close(); } } ---**读写字符串**public class RandomAccessFileDemo4{ public static void main(String[] args){ RandomAccessFile raf = new RandomAccessFile("raf.txt","rw"); String str = "大连今天下雨了"; //字符集(GBK UTF-8) /* * String提供了将当前字符串转换为字节的方法 * byte[] getBytes(); * 将当前字符串按照默认字符集转换 * * byte[] getBytes(String csn) * 将当前字符串按照给定的字符集转换 * 字符集的名字不区分大小写 */ byte[] data = str.getBytes("GBK"); raf.write(data); System.out.println("pos:"+raf.getFilePointer()); raf.seek(0); byte[] buf = new byte[30]; int len = raf.read(buf); System.out.println(len); String s = new String(buf,0,len,"GBK"); System.out.println(s); raf.close(); }}
复制文件
代码案例:
/** * 复制文件 */ public class CopyDemo1{ public static void main(String[] args)throws IOException{ RandomAccessFile src = new RandomAccessFile("music.mp3","r"); RandomAccessFile desc = new RandomAccessFile("music_cp.mp3","rw"); long start = System.currentTimeMillis(); int d = -1; while((d=src.read())!=-1){ desc.write(d); } long end = System.currentTimeMillis(); System.out.println("复制完毕耗时:"+(end-start)); src.close(); desc.close(); }} ---/** * 若希望提高读写效率,需要提高每次读写的数据量 * 来减少读写次数从而达到提高读写效率的目的 */ public class CopyDemo2{ public static void main(String[] args)throws IOException{ RandomAccessFile src = new RandomAccessFile("music.mp3","r"); RandomAccessFile desc = new RandomAccessFile("music_cp.mp3","rw"); /* * int read(byte[] d) * 一次性读取给定的数组总长度的字节量,并存入到该数据中, * 返回值为实际读取到的字节量。若返回值为-1,则表示读取 * 到了文件末尾(EOF end of file) */ int len = -1;//记录每次读取到的实际字节量 byte[] buf = new byte[1024*10];//10k long start = System.currentTimeMillis(); when((len=src.read(buf))!=-1){ /* * void write(byte[] d) * 将给定的字节数组中的左右字节一次性写入到文件中 * * void write(byte[] d,int offset,int len) * 将给定的字节数组中从下标的offset处的字节开始 * 连续len个字节一次性写入到文件中 */ raf.write(buf,0,len); } long end = System.currentTimeMillis(); System.out.println("辅助完毕耗时:"+(end-start)); }}
阅读全文
0 0
- 文件操作——File
- 文件操作——File
- 文件操作——File 、 文件操作—— RandomAccessFile
- Java 文件操作常用方法——File
- C/C++文件输入输出操作——FILE*、fstream、windowsAPI
- C/C++文件输入输出操作——FILE*、fstream、windowsAPI
- C/C++文件输入输出操作——FILE*、fstream、windowsAPI
- C/C++文件输入输出操作——FILE*、fstream、windowsAPI
- C/C++文件输入输出操作——FILE*、fstream、windowsAPI
- C/C++文件输入输出操作——FILE*、fstream、windowsAPI
- C/C++文件输入输出操作——FILE*、fstream、windowsAPI
- C/C++文件输入输出操作——FILE*、fstream、windowsAPI
- C/C++文件输入输出操作——FILE*、fstream、windowsAPI
- C/C++文件输入输出操作——FILE*、fstream、windowsAPI
- C/C++文件输入输出操作——FILE*、fstream、windowsAPI
- I/O 操作文件的类——File
- C/C++文件输入输出操作——FILE*、fstream、windowsAPI
- C/C++文件输入输出操作——FILE*、fstream、windowsAPI
- VB6.0软件调用VS C++ DLL问题解决
- 开始写blog
- Tr A
- 数组中出现的次数超过数组长度的一半的数字
- 吃豆豆--Java小游戏
- 文件操作——File
- 剑指offer面试题11 数值的整数次方 java实现
- 二分图匹配
- Python小记--文件读写简洁方案
- fzu2282 wand 排列组合 错排
- Android开发中嵌套fragment的实现
- HDU 5869 Different GCD Subarray Query
- tensorflow的运行流程与核心关键概念含义介绍
- 666:放苹果 dfs