Unit06: 文件操作——File 、 文件操作—— RandomAccessFile    

java.io.File
File的每一个实例是用来表示文件系统中的一个文件或目录

package day06;

import java.io.File;

/**
* java.io.File
* File的每一个实例是用来表示文件系统中的一个
* 文件或目录
* 使用File可以:
* 1:访问文件或目录的属性信息
* 2:操作文件或目录(创建,删除)
* 3:访问一个目录的子项
* 但是不能:
* 访问文件数据。
* @author adminitartor
*
*/
public class File_Properties {
public static void main(String[] args) {
/*
* 描述路径时应当使用相对路径。
* 常用相对路径:
* 类加载路径
*
* 当前目录".",在eclipse下是当前类所在
* 项目的跟目录(jsd1611_se这个目录)
*/
File file = new File(
"."+File.separator+"demo.txt"
); String name = file.getName();
System.out.println("name:"+name); long length = file.length();
System.out.println("length:"+length); boolean canRead = file.canRead();
boolean canWrite = file.canWrite(); System.out.println("可读:"+canRead);
System.out.println("可写:"+canWrite);
//最后修改时间
long time = file.lastModified(); boolean isHidden = file.isHidden();
}
}

File_Properties.java

使用File创建一个文件

package day06;

import java.io.File;
import java.io.IOException; /**
* 使用File创建一个文件
* @author adminitartor
*
*/
public class File_CreateNewFile {
public static void main(String[] args) throws IOException {
/*
* 当前目录下创建一个名为test.txt的文件
*/
File file = new File("test.txt");
/*
* boolean exists()
* 判断当前File表示的文件或目录是否已经真实
* 存在
*/
if(!file.exists()){
/*
* 创建File表示的文件
*/
file.createNewFile();
System.out.println("文件已创建!");
}else{
System.out.println("文件已存在!");
} }
}

File_CreateNewFile.java

删除一个文件

package day06;

import java.io.File;

/**
* 删除一个文件
* @author adminitartor
*
*/
public class File_Delete {
public static void main(String[] args) {
/*
* 将当前目录下的test.txt文件删除
*/
File file = new File("test.txt");
if(file.exists()){
file.delete();
System.out.println("删除完毕!");
}else{
System.out.println("文件不存在!");
} }
}

File_Delete.java

创建一个目录

package day06;

import java.io.File;

/**
* 创建一个目录
* @author adminitartor
*
*/
public class File_Mkdir {
public static void main(String[] args) {
/*
* 当前目录下创建一个目录demo
*/
File dir = new File("demo");
if(!dir.exists()){
dir.mkdir();
System.out.println("目录创建完毕!");
}else{
System.out.println("该目录已存在!");
} }
}

File_Mkdir.java

创建一个多级目录

package day06;

import java.io.File;

/**
* 创建一个多级目录
* @author adminitartor
*
*/
public class File_Mkdirs {
public static void main(String[] args) {
/*
* 在当前目录下创建目录:
* a/b/c/d/e/f
*/
File dir = new File(
"a"+File.separator+
"b"+File.separator+
"c"+File.separator+
"d"+File.separator+
"e"+File.separator+
"f"
);
if(!dir.exists()){
/*
* 在创建File表示的目录同时将所有
* 不存在的父目录自动创建出来
*/
dir.mkdirs();
System.out.println("目录已创建!");
}else{
System.out.println("该目录已存在!");
} }
}

File_Mkdirs.java

删除一个目录

package day06;

import java.io.File;

/**
* 删除一个目录
* @author adminitartor
*
*/
public class File_Delete2 {
public static void main(String[] args) {
File dir = new File("a");
if(dir.exists()){
/*
* 若删除目录,必须保证该目录是一个
* 空目录(不含有任何子项)
*/
dir.delete();
System.out.println("删除目录完毕!");
}else{
System.out.println("该目录不存在!");
}
}
}

File_Delete2.java

获取一个目录中的所有子项

package day06;

import java.io.File;

/**
* 获取一个目录中的所有子项
* @author adminitartor
*
*/
public class File_ListFiles {
public static void main(String[] args) {
/*
* 查看当前目录下的所有子项
*/
File dir = new File(".");
/*
* boolean isFile()
* 判断当前File表示的是否是一个文件
* boolean isDirectory()
* 判断当前File表示的是否是一个目录
*/
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.java

(用递归实现)编写一个方法,用来将给定的File表示的文件或目录删除

package day06;

import java.io.File;

/**
* 编写一个方法,用来将给定的File表示的文件或
* 目录删除
* @author adminitartor
*
*/
public class Test {
public static void main(String[] args) {
File dir = new File("a");
delete(dir);
}
public static void delete(File f){
//若是一个目录,需要先将其所有子项删除
if(f.isDirectory()){
File[] subs = f.listFiles();
for(File sub : subs){
delete(sub);
}
}
f.delete();
}
} /*
* 1:编写一段代码,实现1+2+3+....100
* 并输出结果。
* 要求在整段代码中不得出现while,for关键字
*
* 2:一个人有20块钱,去买汽水
* 1块钱1瓶汽水,3个瓶盖可以换一瓶汽水,2个
* 空瓶可以换一瓶汽水,问:总共可以喝多少瓶汽水
*
*/

Test.java

* File提供了一个重载的listFiles方法,允许传入
 * 一个文件过滤器java.io.FileFilter,然后将满足
 * 该过滤器要求的子项返回。

package day06;

import java.io.File;
import java.io.FileFilter; /**
* File提供了一个重载的listFiles方法,允许传入
* 一个文件过滤器java.io.FileFilter,然后将满足
* 该过滤器要求的子项返回。
* @author adminitartor
*
*/
public class File_ListFiles2 {
public static void main(String[] args) {
File dir = new File(".");
/*
* 获取当前目录下所有的文本文件
*/
FileFilter filter = new FileFilter(){
/**
* 过滤器中的accept方法的作用是定义过滤
* 规则。若给定的File对象满足要求则返回
* true。listFiles方法将来就会将所有满足
* 要求的子项返回。
*/
public boolean accept(File f) {
String fileName = f.getName();
System.out.println("正在过滤:"+fileName);
return fileName.endsWith(".txt");
}
}; File[] subs = dir.listFiles(filter);
for(File sub : subs){
System.out.println(sub.getName());
}
}
}

File_ListFiles2.java

java.io.RandomAccessFile
 用于读写文件数据

package day06;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile; /**
* java.io.RandomAccessFile
* 用于读写文件数据,读写操作是基于指针进行的,即
* RAF总是在指针位置读写字节,并且指针会自动向后
* 移动。
* RAF有两种常用的创建模式:
* "r":只读模式,仅对文件进行读取操作
* "rw":读写模式,对文件又读又写
*
* @author adminitartor
*
*/
public class RandomAccessFile_Write {
public static void main(String[] args) throws IOException {
/*
* RandomAccessFile提供的常用构造方法:
* RandomAccessFile(String path,String mode)
* RandomAccessFile(File file,String mode)
*
* mode对应的就是操作模式:"rw","r"
*/
RandomAccessFile raf
= new RandomAccessFile(
"raf.dat","rw"
);
/*
* void write(int d)
* 将给定的int值对应的2进制的"低八位"写
* 入文件.写出1个字节
* vvvvvvvv
* 00000000 00000000 00000000 00000001
*/
raf.write(1);
System.out.println("写出完毕!");
raf.close();
}
}

RandomAccessFile_Write.java

使用RandomAccessFile读取文件数据

package day06;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile; /**
* 使用RandomAccessFile读取文件数据
* @author adminitartor
*
*/
public class RandomAccessFile_Read {
public static void main(String[] args) throws IOException {
RandomAccessFile raf
= new RandomAccessFile(
"raf.dat","r"
);
/*
* 读取一个字节,并以10进制形式的int值
* 返回。若返回值为-1,则表示读取到了文件
* 的末尾。
*
* 00000000 00000000 00000000 00000001
*/
int d = raf.read();//
System.out.println(d); d = raf.read();
System.out.println(d);//? raf.close();
}
}

RandomAccessFile_Read.java

复制文件

package day06;

import java.io.IOException;
import java.io.RandomAccessFile; /**
* 复制文件
* @author adminitartor
*
*/
public class CopyDemo1 {
public static void main(String[] args) throws IOException {
RandomAccessFile src
= new RandomAccessFile(
"mv.mp4","r"
); RandomAccessFile desc
= new RandomAccessFile(
"mv_cp.mp4","rw"
); int d = -1; long start = System.currentTimeMillis(); while( (d = src.read()) != -1 ){
desc.write(d);
} long end = System.currentTimeMillis(); System.out.println("复制完毕!耗时:"+(end-start)+"ms"); src.close();
desc.close();
}
}

CopyDemo1.java

若想提高读写效率,可以通过提高每次读写的数据量减少读写次数来达到

package day06;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile; /**
* 若想提高读写效率,可以通过提高每次读写的数据
* 量减少读写次数来达到
* @author adminitartor
*
*/
public class CopyDemo2 {
public static void main(String[] args) throws IOException {
RandomAccessFile src
= new RandomAccessFile(
"mv.mp4","r"
); RandomAccessFile desc
= new RandomAccessFile(
"mv_cp2.mp4","rw"
); /*
* int read(byte[] data)
* 一次性读取给定字节数组长度的字节量,并
* 将读取到的字节存入到该数组中。返回值为
* 实际读取到的字节量,若本次没有读取到任
* 何字节(文件末尾)则返回值为-1
*/
// 10k
byte[] buf = new byte[1024*10];
//表示每次实际读取到的字节量
int len = -1; long start = System.currentTimeMillis();
while( (len = src.read(buf)) !=-1 ){
/*
* void write(byte[] data)
* 将给定的字节数组中的所有字节一次性
* 写出
*
* void write(byte[] data,int i,int len)
* 将给定的字节数组中从下标为i处的字节开始的连续
* len个字节写出
*/
desc.write(buf,0,len);
} long end = System.currentTimeMillis();
System.out.println("复制完毕!耗时:"+(end-start)+"ms"); src.close();
desc.close();
}
}

CopyDemo2.java

使用RAF读写数据,以及理解基于指针的操作

package day06;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile; /**
* 使用RAF读写数据,以及理解基于指针的操作
* @author adminitartor
*
*/
public class RandomAccessFile_RW_DATA {
public static void main(String[] args) throws IOException {
RandomAccessFile raf
= new RandomAccessFile(
"raf.dat","rw"
);
//获取指针当前位置
long pos = raf.getFilePointer();
System.out.println("pos:"+pos); //向文件中写入int值
int max = Integer.MAX_VALUE;
/*
* vvvvvvvv
* 01111111 11111111 11111111 11111111
*/
raf.write(max>>>24); System.out.println("pos:"+raf.getFilePointer()); raf.write(max>>>16);
raf.write(max>>>8);
raf.write(max);
System.out.println("pos:"+raf.getFilePointer());
/*
* void writeInt(int d)
* 将给定的int值对应的4个字节的2进制
* 写入文件
*/
raf.writeInt(max);
System.out.println("pos:"+raf.getFilePointer()); raf.writeDouble(123.123);
System.out.println("pos:"+raf.getFilePointer()); raf.writeLong(1234L);
System.out.println("pos:"+raf.getFilePointer()); System.out.println("写出完毕!"); /*
* void seek(long pos)
* 将指针移动到指定位置
*/
//移动到文件最开始
raf.seek(0);
System.out.println("pos:"+raf.getFilePointer());
/*
* RAF提供了方便读取基本类型的方法
* 如:
* int readInt()
* 该方法会连续读取4个字节并转换为int值
* 返回,若在文件末尾读取,则抛出
* EOFException这个异常.
* End Of File 文件末尾
*/
int n = raf.readInt();
System.out.println(n);
System.out.println("pos:"+raf.getFilePointer()); //读取long
raf.seek(16);
long l = raf.readLong();
System.out.println(l);
System.out.println("pos:"+raf.getFilePointer()); //读取double
raf.seek(8);
double d = raf.readDouble();
System.out.println(d); raf.seek(0);
l = raf.readLong();
System.out.println(l); raf.close();
}
}

RandomAccessFile_RW_DATA.java

读写字符串

package day06;

import java.io.IOException;
import java.io.RandomAccessFile; /**
* 读写字符串
* @author adminitartor
*
*/
public class RandomAccessFile_RW_String {
public static void main(String[] args) throws IOException {
RandomAccessFile raf
= new RandomAccessFile(
"raf.txt","rw"
); String str = "简单点,说话的方式简单点.";
/*
* byte getBytes()
* byte getBytes(String csn)
* 字符串提供了将内容转换为一组字节的方法。
* 无参的是按照系统默认字符集,有参数的
* 则是按照给定名字的字符集转换。
*/
byte[] data = str.getBytes("UTF-8");
raf.write(data); str = "递进的情绪请省略,你又不是个演员,别设计那些情节";
raf.write(str.getBytes("UTF-8")); System.out.println("写出完毕!"); raf.seek(0);
byte[] array = new byte[200];
int len = raf.read(array);
/*
* String提供了构造方法可以将给定的字节数组
* 按照指定的字符集转换为字符串内容
*/
String s = new String(array,0,len,"UTF-8");
System.out.println(s); raf.close();
}
}

RandomAccessFile_RW_String.java

JAVASE02-Unit06: 文件操作——File 、 文件操作—— RandomAccessFile的更多相关文章

  1. 尝试打开或创建物理文件 REATE FILE 遇到操作系统错误 5(拒绝访问)

    尝试打开或创建物理文件 'E:\Library.mdf' 时,CREATE FILE 遇到操作系统错误 5(拒绝访问.). 最佳回答: 这是因为SQL Server的启动帐户(一般是system或某个 ...

  2. Android文件(File)操作

    Android 使用与其他平台上基于磁盘的文件系统类似的文件系统. 本文讲述如何使用 Android 文件系统通过 File API 读取和写入文件. File 对象适合按照从开始到结束的顺序不跳过地 ...

  3. 【转】Android必备知识点- Android文件(File)操作

    Android 使用与其他平台上基于磁盘的文件系统类似的文件系统. 本文讲述如何使用 Android 文件系统通过 File API 读取和写入文件. File 对象适合按照从开始到结束的顺序不跳过地 ...

  4. File常用的方法操作、在磁盘上创建File、获取指定目录下的所有文件、File文件的重命名、将数据写入File文件

    文章目录 1.基本介绍 2.构造方法 3.常用的方法 4.代码实例 4.1 创建文件和目录(目录不存在) 4.1.1 代码 4.1.2 测试结果 4.2 测试目录存在的情况.直接写绝对的路径名 4.2 ...

  5. 前端/H5/JS:通过URL下载文件并转存到其他服务器(微信),Blob文件转File文件

    现在有一个图片URL,在自己服务器上,一个微信提供的媒体文件上传URL,我在前端通过JS实现转存微信服务器 1. http://file.xxx.com/asd.jpg 自己的 2.https://a ...

  6. 使用JavaScript 操作本地文件

    一.显示用户选择文件[图片] <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...

  7. File文件的读写操作RandomAccessFile类

    1.Java提供了一个对文件随机访问的操作,访问包括读和写操作,该类名是RandomAccessFile,该类的读写是基于指针的操作. 2.RandomAccessFile在堆文件进行随机访问操作时有 ...

  8. Day01:文件操作(File、RandomAccessFile)

    文件操作 JAVA中的 File 类是文件和目录路径名的抽象形式.使用 File 类可以获取文件本身的一些信息,例如文件所在的目录.文件长度.文件读写权限等. 在 Java 中,File 类是 jav ...

  9. File 文件操作类 大全

    File  文件操作类  大全 许多人都会对文件操作感到很难  我也是  但是一个好的项目中必定会涉及到文件操作的 文件的复制 粘贴  等等等 公司大佬写了 一个文件操作的工具类 感觉还是棒棒的啦   ...

随机推荐

  1. Myeclipse Templates详解(一) —— Java模板基础

    目录 Templates简介 MyEclipse自带Templates详解 新建Template 自定义Template 因为自己比较懒,尤其是对敲重复代码比较厌恶,所以经常喜欢用快捷键和模板,Mye ...

  2. 基于GMap.Net的地图解决方案

    一 地图的加载与显示 关于GMap的介绍与使用可以看我以前的文章: GMap.Net开发之在WinForm和WPF中使用GMap.Net地图插件 GMap.Net是.Net下一个地图控件,可以基于Ht ...

  3. 在Salesforce中向外公布Service去创建Lead,并且用Asp.Net去调用此Service

    1):在Salesforce中如何配置,向外公布此Service,请看如下链接: http://www.shellblack.com/marketing/web-to-lead/ 2):如何在Asp. ...

  4. Hibernate关联关系的映射

    实体之间的关系 实体之间有三种关系 一对多:一个用户,生成多个订单,每一个订单只能属于一个用户 建表原则:在多的一方创建一个字段,作为外键,指向一的一方的主键 多对多:一个学生可以选择多门课程,一个课 ...

  5. xor和gates的专杀脚本

    前段时间的一次样本,需要给出专杀,应急中遇到的是linux中比较常见的两个家族gates和xor. 首先是xor的专杀脚本,xor样本查杀的时候需要注意的是样本的主进程和子进程相互保护(详见之前的xo ...

  6. sublime代码片段

    创建方法:Tools > New Snippet 这时你会看到如下示例代码: <snippet>      <content><![CDATA[ Hello, ${ ...

  7. ArcGIS 10与ArcEngine 10安装及破解

    1 2 3 4 5 分步阅读 一键约师傅 百度师傅高质屏和好师傅,拯救你的碎屏机 百度经验:jingyan.baidu.com 现在常见的破解方法在下面的地址中已经详细附图说明了,但是这种破解方法,想 ...

  8. Scala:映射和元组

    映射是键值对偶的集合.Scala有一个通用的叫法——元组:n个对象的聚集,并不一定要相同的类型. 构造映射 键A -> 值B scala> val scores = Map()//不可变映 ...

  9. 基于淘宝弹性布局方案lib-flexible的问题研究

    上篇文章<淘宝弹性布局方案lib-flexible实践>结合一个简单的实例,说明了lib-flexible的基本用法,但是lib-flexible的这种适配方式在适配的时候会修改viewp ...

  10. 【Alpha】Daily Scrum Meeting第四次

    之前没领悟到Daily Scrum Meeting的精髓,认为要做出些东西才敢拿出来. 在范老师提醒我们保持有节奏的迭代后,我们意识到之前的想法是不符合Daily Scrum Meeting的思想的. ...