File对象---对文件的操作

原创 2016年08月30日 12:11:22

一.  Map(补充)

* 删除Map元素操作

 * 删除当前Map中给定Key所对应的一组键值对

* 返回值为该组键值对中的value

Map<String, Integer> map = new HashMap<String,Integer>();

              map.put("语文", 99);

              map.put("数学", 98);

              map.put("英语", 96);

              map.put("物理", 97);

              map.put("化学", 99);

              Integervalue = map.remove("语文");

            System.out.println(value);

二.  创建File对象

CPU:纯电路,大部分时间空闲

内存:纯电路,依靠电,断电就小时,有点快

硬盘:主存储,是磁盘的一种,固态硬盘,闪存的一种技术,磁带中的磁头是将磁信号转化为电信号,避免强磁铁

Ctrl+s 程序是在内存中执行的,需要保存到硬盘中,所以从内存保存到硬盘中

* java,io.File 该类用于描述文件系统中的一个文件或目录 File可以:

1.访问文件或目录属性信息

2.:访问一个目录中的所有子项

3.操作文件或目录(创建删除) File不可以 File不可以访问文件数据

public class FileDemo1 {

       public static void main(String[] args) throws IOException {

               * 路径尽量不写绝对路径常用的是相对路径: 1.相对于项目目录(当前目录) 2.相对于类加载目录(实际开发更常用) ./表示当前路径

               * File.separator------>表示的是斜线,一个常量,这样写可支持跨平台

              File file = new File("." + File.separator + "text.txt");

              File f = new File("." + File.separator + "src");

               * 获取当前文件属性

              System.out.println(file.getName());// 获取文件或目录名

              System.out.println(file.length());// 获取文件字节量

              // 文件最后修改时间

              SimpleDateFormatsdf = new SimpleDateFormat("yyyy-MM-ddHH:mm:ss");

              System.out.println("最后修改时间:" + sdf.format(new Date(file.lastModified())));

               * 可读可写可运行可隐藏

              System.out.println(file.canRead());

              System.out.println(file.canWrite());

              System.out.println(file.canExecute());

              System.out.println(file.isHidden());

       }

}

* 使用File创建文件

public class FileDemo2 {

       public static void main(String[] args) throws IOException {

               * 在当前目录下创建demo.txt 不写"./"默认就是当前目录下

              File file = new File("." + File.separator + "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("text.txt");

              if (file.exists()) {

                     file.delete();

                     System.out.println("已删除!");

              } else {

                     System.out.println("文件不存在!");

              }

       }

}

 

* 创建一个目录

public class FileDemo4 {

       public static void main(String[] args) {

               * 在当前目录下创建目录demo

              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 dir = new File("a" + File.separator + "b" + File.separator + "c" + File.separator + "d" + File.separator

                            +"e" + File.separator + "f");

              if (!dir.exists()) {

                     dir.mkdirs();

                     System.out.println("创建完毕");

              } else {

                     System.out.println("创建失败");

              }

       }

}

* 删除目录,只能删除一个,除非删的是空目录

public class FileDemo6 {

       public static void main(String[] args) {

              File dir = new File("a");

              if (dir.exists()) {

                     dir.delete();

                     System.out.println("删除完毕");

              } else {

                     System.out.println("删除失败");

              }

       }

}

//获取子目录

public class FileDemo7 {

       public static void main(String[] args) {

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

              File dir = new File(".");

               * boolean isFile(判断当前对象表示的是否为一个文件,包括是否为文件夹

               * Boolean isDirectory() 判断是否为一个目录

              if (dir.isDirectory()) {

                     File[]subs = dir.listFiles();//查看当前File表示的目录中的所有子项

//每个子项以一个File对象表示,存入File数//组中

                     for (File sub : subs) {

                            System.out.println(sub.getName());

                     }

              }

       }

}

 

//删除嵌套包含多层的文件或目录

public class FileDemo9 {

       public static void main(String[] args) {

              File file = new File("a");

              delete(file);

       }

        * 若是目录,需将目录中所有内容删除

       public static void delete(File file) {

              if (file.isDirectory()) {

                     File[]subs = file.listFiles();

                     for (File sub : subs) {

                            delete(sub);//递归调用

                     }

              }

              file.delete();

              System.out.println("删除完毕");

       }

}

 

 

 

 

//1.编写一段代码,要求1+2+3+…,每次计算后输出一次结果

//2.一个人去买汽水,1块钱买一瓶汽水,三个瓶盖换一瓶汽水,两个空瓶也可以换汽水,20块钱能喝多少瓶汽水

 

 

 

 

* 获取一个目录中的部分子项 File支持一个重载的listFiles方法,要求传入一个文件过滤器,这样只会返回该目录中满足要求的子项

public class FileDemo10 {

       public static void main(String[] args) {

              File dir = new File(".");

              MyFilterfilter = new MyFilter();

              File[]files = dir.listFiles(filter);

              for (File f : files) {

                     System.out.println(f.getName());

              }

       }

}

 

class MyFilter implements FileFilter {

 

       @Override

       public boolean accept(File file) {

 

              return file.getName().endsWith(".txt");

       }

}

三.  RandomAccessFile

* java.io.RandomAccessFile 用于读写文件数据,其基于指针对文件进行读写创建RandomAccessFile有两种常用模式

* 1."r"只读模式,针对文件进行读取操作 2."rw"即读写模式,对文件数据可以编辑

public class RandomAccessFileDemo1 {

       public static void main(String[] args) throws IOException {

               * RandomAccessFile(File f ,String mode)RandomAccessFile(String path

               * ,String mode) mode是操作模式:"r" "rw"

              RandomAccessFileraf = new RandomAccessFile("raf.dat", "rw");

               * void write(int d)

         * 写出一个字节,写出的是该整数对应的二进制中的低八位,一共32

              raf.write(97);// 写的内容是十进制

              raf.write(98);

              raf.close();

}

}

* 读取字节

public class RandomAccessFileDemo2 {

       public static void main(String[] args) throws IOException {

              RandomAccessFileraf = new RandomAccessFile("raf.dat", "r");

               * int read()

               * 从文件中指针当前位置读取该字节,并以十进制的方式返回

               * 若返回值为-1,表示读取到了文件末尾

              int s = raf.read();

              System.out.println(s);

              raf.close();

       }

}

 

 

public class CopyDemo1 {

       public static void main(String[] args) throws IOException {

              RandomAccessFileraf = new RandomAccessFile("raf.dat", "r");

 

              RandomAccessFilearf = new RandomAccessFile("raf_copy", "rw");

              long start = System.currentTimeMillis();

              int d = -1;

              if ((d = raf.read()) != -1) {

                     arf.write(d);

              }

              long end = System.currentTimeMillis();

              System.out.println("复制完毕,共耗时:" + (end - start));

              raf.close();

              arf.close();

       }

}

 

* 若希望提高读写效率,需要提高每次读写的数据量来减少读写次数从而达到提高读写效率的目的

public class CopyDemo2 {

       public static void main(String[] args) throws IOException {

              RandomAccessFileraf = new RandomAccessFile("sucai.rar", "r");

 

              RandomAccessFilearf = new RandomAccessFile("sucai_copy.rar", "rw");

 

               * int read(byte[] d) 一次性读取给定的数组总长度的字节量,并存入到该数组中,返回值为实际读取到的字节量

               * 若返回值为-1,表示读取到了文件末尾(EOF)(end of file)

               * void write(byte[] b) 将给定的字节数组中的所有字节一次性写入到文件中

               * void write(byte[] d ,int offset,intlen)

              int len = -1;

              byte[] buf = new byte[1024 * 10];

              if ((len = raf.read(buf)) != -1) {

                     arf.write(buf, 0, len);

              }

              System.out.println("读取完毕");

              raf.close();

              arf.close();

       }

}

//raf.dat 中有WelcomeNEWYORK

public static void main(String[] args) throws IOException {

              RandomAccessFileraf = new RandomAccessFile("raf.dat", "r");

              raf.skipBytes(8);               //字节从第八个开始read();

              byte[] buf = new byte[7];

              raf.read(buf);

              System.out.println(new String(buf));

              raf.close();

       }

 

* RandomAccessFile读写基本类型数据以及基于指针的读写操作

int imax = Integer.MAX_VALUE;

              raf.write(imax >>> 24);

              raf.write(imax >>> 16);

              raf.write(imax >>> 8);

              raf.write(imax);

              System.out.println(raf.getFilePointer());

              long lmax = Long.MAX_VALUE;

              raf.writeLong(lmax);

              raf.writeDouble(123.123);

              System.out.println(raf.getFilePointer());

              raf.writeByte(10);基于指针读写操作:

RandomAccessFile:基于当前位置进行移动,不会自动返回。

*RAF总在指针当前位置进行读写操作,并且无论进行了读还是写一个字节后,指针都会

*自动向后移动到下一个字节位置

*默认创建出来raf时,指针位置为0,即文件的第一个字节的位置

long pos = raf.getFilePointer();

              System.out.println(pos);

查询当前指针的位置

 

*void seek(long pos) 将指针移动到指定位置

raf.seek(pos); pos----->指针要挪动到的位置

 

* int readInt() 连续读取四个字节,并转换为int返回,若在读取四个字节过程中读取到文件末尾,抛出EOFException

System.out.println(raf.readInt());

 

UTF-8每个汉字占3个字节,但是一个其他字符占一个字符//待测试

GBK 2个字节,但是其他字符也占2个字节

 

               * String 提供了将当前字符串转换为自己的方法

               * byte[] getBytes()

               * byte[] getBytes(String csn)

               * 将当前字符串按照给定的字符集转换

               * 字符集的名字不区分大小写

              RandomAccessFileraf = new RandomAccessFile("raf.txt", "rw");

              Stringstr = "好好努力";

              byte[] date = str.getBytes("UTF-8");

              raf.write(date);

              raf.close();

版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

项目总结(一)------Python对文件和目录进行操作 (file对象/os/os.path/shutil 模块)

使用Python过程中,经常需要对文件和目录进行操作。所以file类/os/os.path/shutil模块是每个Python程序员必须要学习的。下面通过两段代码来对file类和os/os.path/...

java之File对象对文件的操作常用的几个方法

java之File对象对文件的操作常用的几个方法 File对象是对文件操作最常用的类,平常工作总用的很多,贴出来了几个我工作常用的几个方法。简单总结了下 直接上代码: /...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)