欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java文件传输之I/O流。

程序员文章站 2024-03-04 23:07:12
...

Java IO流

1、初识"流"

1.1、流的概念

在计算机世界中,我们常常会听到输入流、输出流的词汇,那么什么是"流"呢?

“流”,最早从C语言中引入的,是一种抽象概念,它代表了数据的无结构化传递。其可以看成是一个流动的数据缓冲区,数据从数据源方向经过缓冲区流向数据的目的地,在传送的过程中,其传送的方式是串行的,在Java中的java.io包中定义了。

Java中常见的接口与类,其中包括两个最基本的抽象类,他们分别是OutputStream与InputStream。其余的流都是分别从这两个基本类中继承而来。

Java文件传输之I/O流。

1.2、流的分类

1、根据数据流向不同分类:输入流输出流

  • 输入流:从磁盘或者其它设备中将数据输入到进程中
  • 输出流:将进程中的数据输出到磁盘或其它设备上保存
    Java文件传输之I/O流。
    图示中的硬盘只是其中一种设备,还有非常多的设备都可以应用在IO流中,例如:打印机、硬盘、显示器、手

2、根据处理数据的基本单位不同分类:字节流字符流

  • 字节流:以字节(8 bit)为单位做数据的传输
  • 字符流:以字符为单位(1字符 = 2字节)做数据的传输

字符流的本质也是通过字节流读取,Java 中的字符采用 Unicode 标准,在读取和输出的过程中,通过以字符为单位,查找对应的码表将字节转换为对应的字符。

面对字节流和字符流,很多读者都有疑惑:什么时候需要用字节流,什么时候又要用字符流?

① 字符流只针对字符数据进行传输,所以如果是文本数据,优先采用字符流传输。

② 除此之外,其它类型的数据(图片、音频等),最好还是以字节流传输。

2、File类的使用

2.1、File类的介绍

1、File类的一个对象,代表一个文件或一个文件目录(俗称:文件夹).

2、File 能新建、删除、重命名文件和目录,但 File 不能访问文件内容本身。 如果需要访问文件内容本身,则需要使用输入/输出流。

3、想要在Java程序中表示一个真实存在的文件或目录,那么必须有一个File对 象,但是Java程序中的一个File对象,可能没有一个真实存在的文件或目录。

4、File对象可以作为参数传递给流的构造器。

5、File类声明在java.io包下。

6、后续File类的对象常会作为参数传递到流的构造器中,指明读取或写入的"终点"。

2.2、File类常用的构造器

1、public File(String pathname) 以pathname为路径创建File对象,可以是绝对路径或者相对路径,如果 pathname是相对路径,则默认的当前路径在系统属性user.dir中存储。

File file = new File("hellp.txt"); // 相当于当前module

① 绝对路径:是一个固定的路径,从盘符开始

② 相对路径:是相对于某个位置开始

2、public File(String parent,String child) 以parent为父路径,child为子路径创建File对象。

3、public File(File parent,String child) 根据一个父File对象和子文件路径创建File对向。

4、代码示例

public class FileTest {
    @Test
    // 如何创建File类的实例
    /*
    相对路径:相较于某个路径下,指明的路径
    绝对路径:包含盘符在内的文件或文件夹的路径
     */
    public void test1(){
        // 构造器1
        File file1 = new File("hello.txt"); // 相对路径:相对于当前module
        // File file = new File("D:\\Java\\JavaSenior\\Day8\\src\\com\\lzh\\java1\\hello.txt"); // 绝对路径
        System.out.println(file1);

        // 构造器2
        File file2 = new File("D:\\Java\\JavaSenior","Day8");
        System.out.println(file2);

        // 构造器3
        File file3 = new File(file2,"test.txt");
        System.out.println(file3); // D:\Java\JavaSenior\Day8\test.txt
        
        // 注意:以上3个变量只是内存层面上对象,输出的只是虚拟地址。
    }
}

2.3、路径分隔符扩展

1、路径中的每级目录之间用一个路径分隔符隔开。

2、路径分隔符和系统有关:

  ① windows和DOS系统默认使用“\”来表示
  ② UNIX和URL使用“/”来表示

3、Java程序支持跨平台运行,因此路径分隔符要慎用。

4、为了解决这个隐患,File类提供了一个常量: public static final String separator。根据操作系统,动态的提供分隔。

File file1 = new File("d:\\howie\\info.txt");
File file2 = new File("d:" + File.separator + "howie" + File.separator + "info.txt"); 
File file3 = new File("d:/hwoie");

5、个人觉得File.separator常量,使用起来比较麻烦,需要拼接字符串,容易出错!

2.4、File类常用方法

1、获取功能

1 public String getAbsolutePath() // 获取绝对路径

2 public String getPath() // 获取路径

3 public String getName() // 获取名称

4 public String getParent() // 获取上层文件目录路径。若无,返回null

5 public long length() // 获取文件长度(即:字节数)。不能获取目录的长度。

6 public long lastModified() // 获取最后一次的修改时间,毫秒值(new Date(file.lastModified()) 可查看具体时间)

/*如下两个方法适用于文件目录*/
  
7 public String[] list() // 获取指定目录下的所有文件或者文件目录的名称数组

8 public File[] listFiles() // 获取指定目录下的所有文件或者文件目录的File数组
相关标签: JavaSE

上一篇: java中struts 框架的实现

下一篇: