`
huangfeiNetJava
  • 浏览: 41043 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

文件操作和IO总结

 
阅读更多

File类详解:

所在包:java.io

       用处:可以通过File对象的方法创建文件对象、删除文件、查找文件,判断文件是目录还是正式文件。

 

文件系统的命名规则:

1.     文件的全名包含文件的路径名和扩展名,单独讲一个文件名是,为只带扩展名的文件名,不含路径。

2.     同一目录下不可能存在同名的目录和真实文件,系统主要有目录类型的文件和真是文件两种,真是文件可以没有扩展名,还有第三种我们不需要就是的虚拟内存文件。

3.     相对目录:指不一路径分隔符开头的文件路径

绝对目录:指以根目录开头的路径,以盘符开头的目录都是绝对目录

当前目录:指相对于程序运行时的目录算起的相对路径

4.     目录分隔符和路径分隔符在liunxwin平台上是不同的,前者为“/”和“:”,后者为“\”和“;”,所以应该使用File类提供的相应属性值。

(注意:能用相对路径的就不要用绝对路径以增强可移植性。)

 

 

File类构造方法:

File(File parent, String child)
          
根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。

File(String pathname)
          
通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。

File(String parent, String child)
          
根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。

File(URI uri)
          
通过将给定的 file: URI 转换为一个抽象路径名来创建一个新的 File 实例。

 

 

File类常用的方法:

 boolean

delete()
          
删除此抽象路径名表示的文件或目录

boolean

equals(Object obj)
          
测试此抽象路径名与给定对象是否相等。

 boolean

exists()
          
测试此抽象路径名表示的文件或目录是否存在。

 

 File

getAbsoluteFile()
          
返回此抽象路径名的绝对路径名形式。

 String

getAbsolutePath()
          
返回此抽象路径名的绝对路径名字符串。

 long

getFreeSpace()
          
返回此抽象路径名指定的分区中未分配的字节数。

 String

getName()
          
返回由此抽象路径名表示的文件或目录的名称。

 String

getPath()
          
将此抽象路径名转换为一个路径名字符串。

 boolean

isDirectory()
          
测试此抽象路径名表示的文件是否是一个目录。

 boolean

isFile()
          
测试此抽象路径名表示的文件是否是一个标准文件。

 long

length()
          
返回由此抽象路径名表示的文件的长度。

static File[]

listRoots()
          
列出可用的文件系统根。

 boolean

mkdir()
          
创建此抽象路径名指定的目录。

 

 

代码示例:

实现功能:文件创建和删除,打印目录和文件

package lesson11;

 

import java.io.File;

public class FileTest{

 

/**

 * @param args

 */

public static void main(String[] args) {

    FileTest ft = new FileTest();

    ft.listRoots();

ft.testCreateAndDelete("D:/Java/Java程序/StudyJava/ NetJava/src/lesson11/Text.txt"); // 路径可变

    ft.printDir("src");

// 列出计算机上的根目录

public void listRoots() {

    // 直接调用File

    File[] lf = File.listRoots();

    System.out.println("磁盘上目录的个数是:" + lf.length);

    for (int i = 0; i < lf.length; i++) {

    System.out.println("" + i + "个目录是" + lf[i].getAbsolutePath());

    }

}

 

// 测试文件创建与删除

public void testCreateAndDelete(String fileName) {

    // 通过传入的名字构造File对象

    File temFile = new File(fileName);

    // 判断文件是否存在

    if (temFile.exists()) {

        if (temFile.isDirectory()) {

System.out.println("这是一个目录:" + temFile.getAbsolutePath());

       }

       if (temFile.isFile()) {

           prinFileAttr(temFile);

           // 删除文件

           temFile.delete();

           String theName = temFile.getName();

           String absPath = temFile.getAbsolutePath();

           System.out .println("文件已删除,名字是:" + theName + " 绝对路径是:" + absPath);

           }

       } else {

           try {

           temFile.createNewFile();

            System.out.println("文件已创建!" + temFile.getAbsolutePath());

              // 打印出文件的长度

              prinFileAttr(temFile);

           } catch (Exception ef) {

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

           }

       }

    }

// 打印出文件的相关属性:长度,文件名,父目录名,是否隐藏文件

public void prinFileAttr(File temf) {

    System.out.println("文件长度是:" + temf.length());

    }

    public int printDir(String dirName){

       //文件计数器

       int count = 0;

       File dirFile = new File(dirName);

       File[] subFile = dirFile.listFiles();

       if(null == subFile||subFile.length==0){

           return 0;

       }

       for(int i=0;i<subFile.length;i++){

           if(subFile[i].isDirectory()){

              String subDir=subFile[i].getAbsolutePath();

              System.out.println("目录:"+subDir);

              count +=printDir(subDir);

           }

           if(subFile[i].isFile()){

              count++;

              String fileName = subFile[i].getAbsolutePath();

              System.out.println("文件:"+fileName);

           }

       }

       return count;

    }

}

 

 

 

 

异常:

Try catch处理机制:

格式:  

     try{

可能抛出异常的代码……

//如果没有问题出现,指向如下代码

(A)        其他计算代码

}catchException ef{

//如果出现异常后执行的代码;

B)出现异常情况的执行代码

}

 

异常信息的分析与程序调试:

1.     try  catch 机制

2.     throws:在方法上抛出异常

例:public void Test() throws Exception(){ 方法体 }

注意:当另外一个方法调用了一个声明为可能抛出异常的方法时,要么将调用这个方法的代码放入try catch块中;要么将调用方法也声明为抛出异常。

3.     如果不想再代码中编写try块,就必须对调用方法做如下声明:  public void Test(){ 

throw new Exception(“”);

}

如果方法体中使用throw关键字抛出了Exception类型(或其子类)的对象,在方法的声明中就必须使用throws关键字声明,throws后面异常类名字必须是throw抛出异常对象的类型或其父类类型---因为永远是自动的。

 

IO流:

在计算机编程中,流就是一个类的对象,很多文件的输入输出操作都以类的成员函数的方式来提供。

计算机中的流其实是一种信息的转换。它是一种有序流,因此相对于某一对象,通常我们把对象接收外界的信息输入(Input)称为输入流,相应地从对象向外输出(Output)信息为输出流,合称为输入/输出流(I/O Streams)。对象间进行信息或者数据的交换时总是先将对象或数据转换为某种形式的流,再通过流的传输,到达目的对象后再将流转换为对象数据。所以,可以把流看作是一种数据的载体,通过它可以实现数据交换和传输。

JAVA中,流是一个很形象的概念,当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是文件,内存,或是网络连接。类似的,当程序需要写入数据的时候,就会开启一个通向目的地的流。

      Java中的流分为两种,一种是字节流,另一种是字符流,分别由四个抽象类来表示:InputStreamOutputStreamReaderWriterJava中其他多种多样变化的流均是由它们派生出来的。

 

流的分类:

1.     字节流

2.     过滤流

3.     数据类型流

4.     对象流

 

InputStream

常用方法:

 int

available()
          
返回下一次对此输入流调用的方法可以不受阻塞地从此输入流读取(或跳过)的估计剩余字节数。

 void

close()
          
关闭此文件输入流并释放与此流有关的所有系统资源。

int

read()
          
从输入流中读取数据的下一个字节。

 int

read(byte[] b)
          
从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中。

FileInputStream类:

构造方法:

FileInputStream(File file)
          
通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的 File 对象 file 指定。

FileInputStream(FileDescriptor fdObj)
          
通过使用文件描述符 fdObj 创建一个 FileInputStream,该文件描述符表示到文件系统中某个实际文件的现有连接。

FileInputStream(String name)
          
通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的路径名 name 指定。

 

常用方法和InputStream差不多。

 

OutputStream

常用方法:

方法摘要

 void

close()
          
关闭此输出流并释放与此流有关的所有系统资源。

 void

flush()
          
刷新此输出流并强制写出所有缓冲的输出字节。

 void

write(byte[] b)
          
b.length 个字节从指定的 byte 数组写入此输出流。

 void

write(byte[] b, int off, int len)
          
将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此输出流。

abstract  void

write(int b)
          
将指定的字节写入此输出流。

 

FileOutputStream类:

构造方法摘要

FileOutputStream(File file)
          
创建一个向指定 File 对象表示的文件中写入数据的文件输出流。

 

FileOutputStream(File file, boolean append)
          
创建一个向指定 File 对象表示的文件中写入数据的文件输出流。

 

FileOutputStream(FileDescriptor fdObj)
          
创建一个向指定文件描述符处写入数据的输出文件流,该文件描述符表示一个到文件系统中的某个实际文件的现有连接。

 

FileOutputStream(String name)
          
创建一个向具有指定名称的文件中写入数据的输出文件流。

 

FileOutputStream(String name, boolean append)
          
创建一个向具有指定 name 的文件中写入数据的输出文件流。

 

 

方法摘要

 void

close()
          
关闭此文件输出流并释放与此流有关的所有系统资源。

protected  void

finalize()
          
清理到文件的连接,并确保在不再引用此文件输出流时调用此流的 close 方法。

 FileChannel

getChannel()
          
返回与此文件输出流有关的唯一 FileChannel 对象。

 FileDescriptor

getFD()
          
返回与此流有关的文件描述符。

 void

write(byte[] b)
          
b.length 个字节从指定 byte 数组写入此文件输出流中。

 void

write(byte[] b, int off, int len)
          
将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此文件输出流。

 void

write(int b)
          
将指定字节写入此文件输出流。

 

缓冲流:

功能:提高读写效率

构造方法摘要

BufferedInputStream(InputStream in)
          
创建一个 BufferedInputStream 并保存其参数,即输入流 in,以便将来使用。

 

BufferedInputStream(InputStream in, int size)
          
创建具有指定缓冲区大小的 BufferedInputStream 并保存其参数,即输入流 in,以便将来使用。

 

BufferedOutputStream(OutputStream out)
          
创建一个新的缓冲输出流,以将数据写入指定的底层输出流。

BufferedOutputStream(OutputStream out, int size)
          
创建一个新的缓冲输出流,以将具有指定缓冲区大小的数据写入指定的底层输出流。

:对于BufferedOutputStream要么用flush()方法强制想缓冲区的数据读出来,要么要及时close(),否则数据留在缓冲区,会导致数据没有读到输出文件中。

综合实例:

package lesson12;

import java.io.BufferedInputStream;

import java.io.BufferedOutputStream;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

 

public class FileIO {

       /**定义一个类,实现文件复制功能

        * @param args

        */

       public static void main(String[] args) {

              //注意两个路径的文件的后缀名一定要相同,否则可以复制,但打开会有乱码

              String inputFile = "D:/soft/jdk1.6.CHM";

              String outputFile = "D:\\Java\\src\\lesson12\\输出文件.CHM";

                     FileIO file = new FileIO();

                     file.copy(inputFile,outputFile);

       }

       //方法

       public  void copy(String InputFile,String OutputFile) {

                     try {

                            //定义输入流

                            InputStream ips = new FileInputStream(InputFile);

                            //定义缓冲输入流

                            BufferedInputStream bis = new BufferedInputStream(ips);

                            //计算输入文件的长度

                            int len = ips.available();

                            //定义一个字节数组,长度为文件大小

                            byte[] array = new byte[len];

                            //读取数据

                            ips.read(array);

                            //定义文件输出流

                            OutputStream ops= new FileOutputStream(OutputFile);

                            //定义缓冲流

                            BufferedOutputStream bos = new BufferedOutputStream(ops);

                            //将数组的内容输出到指定文件里

                            bos.write(array);

                            //一定要记得关闭流

                            bos.flush();

                            ops.close();

                            ips.close();

                            bos.close();

                            bis.close();

                            System.out.println("文件输出成功!!");

                     } catch (FileNotFoundException e) {

                            e.printStackTrace();

                     } catch (IOException e) {

                            e.printStackTrace();

                     }

       }

}

  

 

1
2
分享到:
评论

相关推荐

    Linux文件IO跟标准IO总结

    4. **适用场景**:标准IO适合文本处理和简单文件操作,而文件IO更适合底层系统编程或高效IO操作。 为了更好地理解和对比这两种IO方式,可以参考以下资源: - **标准IO跟文件IO区别.pdf**:这个文档可能详细分析了...

    文件IO编程总结

    文件输入输出(File Input/Output,简称文件IO)是计算机编程中的基础操作,尤其是在系统级编程和应用开发中不可或缺。本文将围绕“文件IO编程”这一主题,详细讲解相关知识点,帮助初学者快速掌握文件IO的基本概念...

    Android文件IO操作

    总结,Android的文件IO操作提供了丰富的API来处理各种数据存储需求。理解这些类和接口的工作原理对于构建高效、可靠的应用程序至关重要。通过合理选择和组合不同的流,开发者可以实现高性能的数据读写操作,同时确保...

    io操作复制文件

    在Java编程语言中,IO(Input/Output)操作是处理数据输入和输出的关键部分,尤其在文件操作中显得尤为重要。本篇文章将详细讲解如何使用Java的IO流进行文件复制。 一、基本概念 IO流是Java中处理输入输出的基础,...

    IO文件流操作

    Java 7引入了NIO.2,引入了Path、Files、Paths等新类,使得文件操作更加简洁。 总结,Java中的IO文件流操作是编程中必不可少的部分,理解并熟练掌握各类流的使用,能够有效提升程序的效率和灵活性。在实际开发中,...

    IO总结处理

    根据给定的信息,本文将对Java IO的基本概念及其在文件操作中的应用进行详细的解析与总结。主要内容包括:创建文件、删除文件、创建目录、列出指定目录下的所有文件及子目录等基本操作。 ### 一、Java IO概述 Java...

    java中的IO操作总结(四)

    java中的IO操作总结(四) 前面已经把java io的主要操作讲完了 这一节我们来说说关于java io的其他内容 Serializable序列化 实例1:对象的序列化 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23...

    用C++实现简单的文件IO操作

    在进行文件操作时,还需要关注文件的状态和可能发生的错误。 - **检查文件状态**: 可以使用`eof()`、`fail()`、`bad()`等成员函数来检查文件状态: ```cpp if (fout.eof()) { // 文件结束 } if (fout.fail())...

    文件IO.zip

    总结,文件IO是软件开发中不可或缺的一部分,理解并熟练掌握文件的读写操作、错误处理以及高效利用文件系统功能,能极大地提高代码的稳定性和效率。通过学习和实践,你将能够灵活地处理各种文件相关的任务。

    IO总结总结总结总结总结

    Java IO是处理文件读写操作的重要组成部分,涉及多个类和接口。理解它们的使用场景和特点对于进行有效且高效的文件数据处理至关重要。使用时需要注意流的类型(字节流或字符流)、节点流与处理流的区别以及序列化和...

    IO文件流总结

    字节流、文件流、文件操作、字节流文件流相互转换,流的包装

    Java学习之IO总结及mina和netty

    这篇博客“Java学习之IO总结及mina和netty”探讨了Java IO的基础知识,并深入到两个高级网络通信框架——Mina和Netty。Mina和Netty都是基于NIO(非阻塞IO)的高性能网络应用框架,它们简化了复杂网络编程的实现。 *...

    Java_IO完全总结

    ### Java IO系统全面解析 #### 一、Java IO系统概述 ...无论是文件操作、网络通信还是对象序列化,Java IO系统都能提供合适的方法和技术支持。理解和掌握Java IO系统对于任何Java开发者来说都是非常重要的。

    linux文件IO之整理笔记

    本文总结了 Linux 文件 IO 的相关知识点,涵盖了文件 IO 的基本概念、文件描述符、open 函数、read 函数、write 函数、lseek 函数、close 函数等。 一、文件 IO 概念 文件 IO 是计算机操作系统中最基本的输入/输出...

    使用 Labview 文件IO 打开和读取文本文件实验测试

    * 使用 Labview 文件IO 模块可以实现对文件的读取和写入操作。 * 控件板面和存储和数据插件是 Labview 中的基本控件和插件,用于读取和写入文件。 * 通过 Labview 文件IO 模块,我们可以实现对文本文件的内容进行...

    java文件操作总结

    在Java中,文件操作主要通过java.io包中的类和接口实现。下面将对Java文件操作进行详细的总结,并提供相关的示例。 1. **File类**:Java中的`File`类是所有文件和目录操作的基础。它提供了创建、删除、重命名文件和...

    文件的IO异步读写操作

    在IT领域,文件的输入/输出(Input/Output, IO...总结来说,异步IO操作是提高程序性能和响应性的重要手段,尤其在处理文件读写和删除等IO密集型任务时。理解和熟练运用异步编程技术,能够使我们的应用更加高效和健壮。

    C# IO 操作,C# IO高性能操作

    1. **使用`System.IO`命名空间**:此命名空间包含了用于文件和目录操作的各种类。 2. **使用集合(如`List&lt;T&gt;`)存储数据**:便于数据的管理和处理。 3. **字符串分割和转换**:将读取的字符串按需分割,并将数字...

    JAVAIO操作总结

    字节流以字节为单位进行数据传输,主要由InputStream和OutputStream家族构成,例如FileInputStream和FileOutputStream用于文件操作,ByteArrayInputStream和ByteArrayOutputStream则用于内存中的字节数组。...

    java io 操作总结

    在这篇总结中,我们将探讨Java IO操作的各个方面,包括File类、RandomAccessFile类、字节流与字符流的基本操作,以及具体实现文件读写的技术细节。 首先,File类在Java IO操作中扮演着重要角色。它提供了关于文件和...

Global site tag (gtag.js) - Google Analytics