文件I/O操作

Posted wengbm

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文件I/O操作相关的知识,希望对你有一定的参考价值。

  • 熟悉文件的各种流类
  • 了解字符的编码
  • 掌握文件I/O操作的相关概念
  • 了解对象的序列化

简单的引入

在Java中所有的IO机制都是基于“流”方式进行输入和输出。这些流可以视为同一台计算机不同设备或者是不同计算机之间数据序列的流动。这些流序列的数据通常有两种格式:文本流和二进制流。文本流每一个字节存放一个ASCII码代表一个字符(而对于Unicode编码来说,每两个字节代表一个字符)。如整形数12345,其在内存中需要两个字节,其系统为整型分配四个字节,所以高两位的字节为0,而按文本流输出则占用五个字符,由于分别是12345这五个字符所对应的ASCII码

内存中的存储形式
00000000 00000000 00110000 00111001
二进制行形式:与内存中的存储形式完全相同
00000000 00000000 00110000 00111001
文本形式:分别对应各自的ASCII码
00000001 00000010 00000011 00000101

 

 

 

 

 

 

文本流与二进制流的优缺点

文本流:文本流形式和字节流一一对应,因而便于对于对字符进行逐个处理,也便于输出显示,但是占用较多的内存空间,且花费较多的转换时间(二进制和 编码之间的转换)。在Java中的Unicode编码,这是一种定长编码,每个字符两个字节,因此在存储ASCII码时会额外浪费一个字节的空间。

二进制流:可以节省外存空间和转化时间,但是一个字节不对应一个字符,不能直接输出字符形式。

总结:对于纯文本信息(比如字符串),以文本形式存储较佳;而对于数值信息,则用二进制形式较好。

I/O流的优势在于简单易用,缺点是效率低。Java的I/O提供了读写数据 的标准方法。Java语法中定义了许多类专门负责各种方式的输入输出,这些类被放在java.io包中。在java类库中,有关IO操作内容非常的庞大:有标准的输入输出、文件的操作、网路上的数据流、字符串流和对象流等。

1.文件操作类--File

  总结

    对文件或文件夹进行操作(仅仅操作文件本身的属性不指定怎样从文件读取或者存储)

 

  在java.io包中,File类是唯一一个与文件本身操作有关的操作类。它定义了一系列与平台无关的方法来操作文件,通过调用File类,能够完成创建、删除、重命名文件,判断文件的读写权限以及问价是否存在,设置

  和查询问价创建的时间、权限等操作。File类除了对文件的操作外,还可以将目录当做文件来处理。

     File(String directoryPath);//创建指定文件或者目录文件的File对象
        File(String directoryPath,String filename);//创建由File对象和指定文件名的FIle对象
        File(File dirObj,String filename);//创建指定文件目录和文件名册File对象
        File F1=new File("G:\\");//创建 指向“G:\”的File对象
        File F2=new File("G:\\","1.txt");//创建指向“G:\1.txt”的File对象
        File F3=new File(F1,"1.txt");//创建指向“G:\1.txt”的File对象

注意:

  路径分隔符。在Linux/Unix下用斜线(/)路径处理正确;在Windows/DOS下使用反斜线(\),,那么就需要在字符串内使用转义字符\(\\)。

常用方法如下

方法 功能描述
boolean canRead() 测试应用程序是否能从指定的文件中读取
boolean canWirte() 测试应用程序是否能够写当前文件
boolean delete() 删除当前指定的文件
boolean equals() 比较该对象指定的对象
boolean exists() 测试当前的File是否存在
String getAbosolutePath() 返回该对象表示的文件的绝对的路径名
String getCanonicalPath() 返回当前File对象的路径名的规范格式
String getName() 返回当前对象的文件名
String getParent() 获取父路径名,没有就返回null
String getPath) 返回当前对象的路径名
boolean isAbosolute() 测试当前对象是否是一个绝对路径名
boolean isDirectory()

是否是一个路径

boolean isFile() 是否是一个file
long islastModified() 返回最后修改的时间
long length() 返回当前File的文件的长度
String list() 返回路径文件列表
boolean mkdir() 创建一个目录路径名由当前File对象指定
boolean  mkdirs() 创建一个目录路径名由当前File对象指定包括任一必须的父路径
boolean renameTo() 将当前file对象指定的文件更改名为指定参数File指定的路径名

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

范例

技术分享图片
package Learn;

import java.io.File;

public class FileDemo {
    public static void main(String[] args) {
        File f=new File("c:\\1.txt");
        if(f.exists()){
            f.delete();
        }
        try{
            f.createNewFile();
        }catch(Exception e){
            System.out.println(e.getMessage());
        }
        
        System.out.println(f.getName());//取得文件名
        System.out.println(f.getPath());//取得文件路径
        System.out.println(f.getAbsolutePath());//取得绝对路径名
        System.out.println(f.getParent());//父文件夹名
        System.out.println(f.exists());//文件是否存在
        System.out.println(f.canWrite());//文件可不可写
        System.out.println(f.canRead());//文件可不可度
        System.out.println(f.isDirectory());//文件是不是个目录
        System.out.println(f.isFile());//文件是不是文件
        System.out.println(f.isAbsolute());//文件是不是绝对路径
        System.out.println(f.lastModified());//文件最后的修改时间
        System.out.println(f.length());//文件的额长度
    }

}
View Code

 

 I:input  由外围输入到内存

  O:output  由内存写出到外存。

  I/O:是相对于内存来说的

2.RandomAccessFile类

  可以跳转到文件的任意位置处读写数据

3.字节流和字符流

  字节流

    读:INputStream(抽象类)

    写:OutputStream(抽象类)

  字符流


以上是关于文件I/O操作的主要内容,如果未能解决你的问题,请参考以下文章

文件未关闭时对已关闭文件的 I/O 操作

笔记:I/O流-文件操作

C++标准I/O库:iostream, fstream, sstringstream

linux中文件I/O操作(系统I/O)

java I/O流基础(知识+代码示例)

java I/O流基础(知识+代码示例)