JavaSE-19 IO

学习要点

  • File类操作文件和目录的属性
  • 字节流读写文件
  • 字符流读写文件
  • 字节流读写二进制文件

文件操作

1  文件的定义

文件可认为是相关记录或放在一起的数据的集合。文件一般保存在硬盘、U盘、光盘、云盘的媒介中。

2  Java如何操作文件

JAVA API :java.io.File 类

3  File对象构建

File file = new File( String pathname );

//String pathname格式:"e:\\test .txt"或"e:/test .txt"

  

4  File类常用方法


方法名称


说      明


boolean exists( )


判断文件或目录是否存在


boolean isFile( )


判断是否是文件


boolean isDirectory( )


判断是否是目录


String getPath( )


返回此对象表示的文件的相对路径名


String getAbsolutePath( )


返回此对象表示的文件的绝对路径名


String getName( )


返回此对象表示的文件或目录的名称


boolean delete( )


删除此对象指定的文件或目录


boolean createNewFile( )


创建名称的空文件,不创建文件夹


long  length()


返回文件的长度,单位为字节, 如果文件不存在,则返回 0L

5  File操作文件示例

public static void main(String[] args) {

        FileOperation fm = new FileOperation();

        File file = null;

        file = new File("e:\\myDoc\\test.txt");

        fm.create(file);

        fm.showFileInfo(file);

        fm.delete(file);

    }

    /** 创建文件的方法 */

    public void create(File file) {

        if (!file.exists()) {

            try {

                file.createNewFile();

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

            } catch (IOException e) {

                e.printStackTrace();

            }

        }

    }

    /** 删除文件 */

    public void delete(File file) {

        if (file.exists()) {

            file.delete();

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

        }

    }

    /** 显示文件信息 */

    public void showFileInfo(File file) {

        if (file.exists()) { // 判断文件是否存在

            if (file.isFile()) { // 如果是文件

                System.out.println("名称:" + file.getName());

                System.out.println("相对路径: " + file.getPath());

                System.out.println("绝对路径: " + file.getAbsolutePath());

                System.out.println("文件大小:" + file.length() + " 字节");

            }

            if (file.isDirectory()) {

                System.out.println("此文文件是目录");

            }

        } else

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

    }

6  上机练习

查看文件属性,创建和删除文件。

1  定义

Flie类提供了访问文件和目录属性的方法,如何读写文件的内容?通过流来读写。

流的概念:流是指一连串流动的字符,是以先进先出方式发送信息的通道。

输入/输出流和数据源的关系:

2  Java流的分类

  • 输入输出流是相对于计算机内存而言
  • 字节流是 8 位通用字节流,字符流是 16 位 Unicode 字符流
  • IO体系示意图

3  常用的文件读写类

文本文件的读写

字节流方式:FileInputStream、FileOutputStream

字符流方式:BufferedReader、BufferedWriter

二进制文件的读写

DataInputStream、DataOutputStream

字节流方式读写文本

1  FileInputStream 读文本文件

InputStream类常用方法


方法


说明


int read( )


从此输入流中读取一个数据字节。


int read(byte[] b)


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


int read(byte[] b,int off,int len)


从此输入流中将最多 len 个字节的数据读入一个 byte 数组中。


void close( )


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


int available()


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

子类FileInputStream常用的构造方法


构造方法


说明


FileInputStream(File file)


通过文件对象创建FileInputStream对象。


FileInputStream(String name)


通过name文件路径创建FileInputStream对象。

示例代码

package com.etc.io;

//1.引入相关类

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

public class FISTest {

   public static void main(String[] args) {

       FileInputStream fis = null;

       try {

           // 2.构造文件输入流对象

           fis = new FileInputStream("e:\\mydoc.txt");

           // 3.读取文本文件数据

           byte[] words = new byte[1024];// 构建数组,一次读取1024个字节

           while (fis.read() > 0) {

               fis.read(words);

           }

           // 4. 输出内容

           String str = new String(words, "utf-8");

           System.out.println(str);

       } catch (FileNotFoundException e) {

           e.printStackTrace();

       } catch (IOException e) {

           e.printStackTrace();

       } finally {

           // 5. 关闭输入流

           try {

               if (fis != null) {

                   fis.close();

               }

           } catch (IOException e) {

               e.printStackTrace();

           }

       }

   }

}

  

2  FileOutputStream 写文本文件

OutputStream类常用方法


方法


说明


void write(int c)


将指定字节写入此文件输出流。


void write(byte[] buf)


将 b.length 个字节从指定 byte 数组写入此文件输出流中。


void write(byte[] b,int off,int len)


将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此文件输出流。


void close( )


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

子类FileOutputStream常用的构造方法


构造方法


说明


FileOutputStream (File file)


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


FileOutputStream(String name)


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


FileOutputStream(String name,

boolean append)


创建一个向指定 File 对象表示的文件中写入数据的文件输出流。如果第二个参数为 true,则将字节写入文件末尾处,而不是写入文件开始处。

注意:

1、前两种构造方法在向文件写数据时将覆盖文件中原有的内容。

2、创建FileOutputStream实例时,如果相应的文件并不存在,则会自动创建一个空的文件。

3、FileInputStream和FileOutputStream创建的流属于节点流,直接操纵数据源。

示例代码

package com.etc.io;

//1.引入IO相关类

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

public class FOSTest {

   public static void main(String[] args) {

       FileOutputStream fos = null;

       try {

           // 2.构造FileOutputStream对象

           fos = new FileOutputStream("e://fos.txt");

           // 3.把数据写入文本文件

           String text = "好好学习Java,天天向上!";

           byte[] words = text.getBytes();

           fos.write(words, 0, words.length);

           System.out.println("数据写入文件成功");

       } catch (FileNotFoundException e) {

           e.printStackTrace();

       } catch (IOException e) {

           e.printStackTrace();

       } finally {

           // 4.关闭文件流

           try {

               if (fos != null) {

                   fos.close();

               }

           } catch (IOException e) {

               e.printStackTrace();

           }

       }

   }

}

3 上机练习:复制文本文件

需求描述

文件“我的介绍.txt”位于D盘根目录下,要求将此文件的内容复制到E:\myFile\myInfo.txt中。

分析

使用FileInputStream实现读取文本文件。

使用FileOutputStream实现向文本文件中写数据

实现思路

1. 创建文件“D:\我的介绍.txt”并自行输入内容

2. 创建C:\myFile的目录。

3. 创建输入流FileInputStream对象,负责对D:\我的结束.txt文件的读取。

4. 创建输出流FileOutputStream对象,负责将文件内容写入到C:\myFile\myInfo.txt中。

5. 创建中转站数组words,存放每次读取的内容。

6. 通过循环实现文件读写。

7. 关闭输入流、输出流

字符流方式读写文本文件

1  BufferedReader读文本文件

使用字符流读取文本文件相关类

Reader

FileReader(节点流)

BufferedReader(处理流)

Reader类常用方法

int read( )

int read(char[] c)

int read(char[] c,int off,int len)

void close( )

子类BufferedReader常用的构造方法

public  BufferedReader(Reader in)   //in通常使用FlieReader对象

子类BufferedReader特有的方法

public String readLine()   //读取一行信息

乱码问题

方案一:字节流到字符流的转换

文本保存为utf-8格式

FileInputStream fis=new FileInputStream("e:\\mydoc.txt");

//使用InputStreamReader并设置编码格式

InputStreamReader fr=new InputStreamReader(fis,"UTF-8");

BufferedReader br=new BufferedReader(fr);

  

方案二:重构字符串

示例代码

package com.etc.io;

//1.引入IO相关类

import java.io.BufferedReader;

import java.io.FileReader;

import java.io.IOException;

public class BrTest {

   public static void main(String[] args) {

       FileReader fr = null;

       BufferedReader br = null;

       try {

           // 2.创建一个FileReader对象

           fr = new FileReader("E:\\mydoc.txt");

           // 3.创建一个BufferedReader 对象

           br = new BufferedReader(fr);

           // 4.读取一行数据

           String line = br.readLine();

           while (line != null) {

               String str = new String(line.getBytes(), "UTF-8");

               System.out.println(str);

               line = br.readLine();

           }

       } catch (IOException e) {

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

       } finally {

           try {

               // 6. 关闭 流

               if (br != null)

                   br.close();

               if (fr != null)

                   fr.close();

           } catch (IOException e) {

               e.printStackTrace();

           }

       }

   }

}

  

2  BufferedWriter写文本文件

使用字符流写文本文件相关类

Writer

FileWriter(节点流)

BufferedWriter(处理流)

Writer类常用方法

void write(String str)

void write(String str,int off,int len)

void close()

void flush()

子类BufferedWriter常用的构造方法

BufferedReader(Writer out)  //in通常使用FlieWriter对象

示例代码

package com.etc.io;

//1、引入IO相关类

import java.io.BufferedWriter;

import java.io.FileWriter;

import java.io.IOException;

public class BwTest {

   public static void main(String[] args) {

       FileWriter fw = null;

       BufferedWriter bw = null;

       try {

           // 2.创建一个FileWriter 对象

           fw = new FileWriter("e:\\hi.txt");

           // 3.创建一个BufferedWriter 对象

           bw = new BufferedWriter(fw);

           // 4.写入数据

           bw.write("大家好!");

           bw.write("我正在学习Java IO。");

           bw.newLine();

           bw.write("请多多指教!");

           bw.newLine();

           bw.flush();// 刷新缓冲区

           System.out.println("写入文件信息成功!");

       } catch (IOException e) {

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

       } finally {

           // 5.关闭流

           try {

               if (bw != null) {

                   bw.close();

               }

               if (fw != null)

                   fw.close();

           } catch (IOException ex) {

               ex.printStackTrace();

           }

       }

   }

}

  

3  上机练习:模板文件的替换

需求描述

1、格式模版保存在文本文件person.template中,内容如下:

您好!

我的名字是{name},我是{grade}学生。

我的专业是{speciality}。

2、其中{name}、{grade}、{speciality}是需要替换的内容,现在要求按照模板格式保存个人数据到文本文件,即把{name}、{grade}、{speciality}替换为具体的个人。

分析

1、使用Reader实现类读取文件

2、使用String的replace(char oldChar, char newChar)的方法替换内容

3、使用Writer实现类写文件

字节流方式读写二进制文件

1  DataInputStream类读取二进制文件(处理流)

FileInputStream的子类

与FileInputStream类结合使用读取二进制文件

2  DataOutputStream类写二进制文件(处理流)

FileOutputStream的子类

与FileOutputStream类结合使用写二进制文件

3  示例代码

/**

     * 二进制文件拷贝

     * @param sFile 源文件

     * @param dFile 目标文件

     */

    public static void copyBinFile(File sFile, File dFile) {

        FileInputStream fis = null;// 定义字节流输入节点流

        DataInputStream dis = null;// 定义二进制输入处理流

        FileOutputStream fos = null;// 定义字节流输出节点流

        DataOutputStream dos = null;// 定义二进制输出处理流

        try {

            fis = new FileInputStream(sFile);

            dis = new DataInputStream(fis);// 构建二进制输入处理流

            fos = new FileOutputStream(dFile);

            dos = new DataOutputStream(fos);// 构建二进制输出处理流

            int temp;

            while ((temp = dis.read()) != -1) {// 读取数据

                dos.write(temp);// 写数据

            }

            System.out.println("拷贝文件" + sFile.getName() + "成功!");

            System.out.println("文件路径:" + sFile.getAbsolutePath());

        } catch (FileNotFoundException e) {

            e.printStackTrace();

        } catch (IOException e) {

            e.printStackTrace();

        } finally {

            // 关闭资源

            try {

                if (dos != null) {

                    dos.close();

                }

                if (fos != null) {

                    fos.close();

                }

                if (dis != null) {

                    dis.close();

                }

                if (fis != null) {

                    fis.close();

                }

            } catch (IOException e) {

                e.printStackTrace();

            }

        }

    }

  

4  上机练习:从D盘拷贝一张图像文件到E盘

原文地址:https://www.cnblogs.com/rask/p/8254125.html

时间: 2025-01-17 20:10:15

JavaSE-19 IO的相关文章

JAVA 19 IO流之字节流

字节流两个基类 InputStream  读 OutputStream   写 字符流的两个基类 Reader Writer 这四个抽象类派生出来的子类都是以其父类名作为子类后缀的 OutputStream 基本方法: close() flush() write()   参数为:byte[]  b,int b InputStream 基本方法 read() int avaliable()   返回文件中的剩余字节个数.即文件大小,这样就可以定义一个数组来恰好装下数据.但是数据量太大不可以这样用

JavaSE(一) IO类层次关系和各种IO流的用法总结

今天把IO流的这一知点进行一下总结,因为在之前使用io流的时候,就只知道几个重点常用的IO类,比如FileInputStream,BufferedInputStream(缓冲流)等等,但是不知道它处于整个IO体系中的什么位置,对于其中的整个IO体系一点不了解,每次使用的时候都需要百度查看用法例子,这就说明自己对这块的知识有所欠缺,所以今天,来详细的分析,解剖一下IO的整个结构. 借鉴博文:http://www.cnblogs.com/skywang12345/p/io_01.html  该博主写

08 - JavaSE之IO流

IO流 JAVA流式输入输出原理:可以想象成一根管道怼到文件上,另一端是我们程序,然后流的输入输出都是按照程序本身作为第一人称说明的.比如 input,对于我们程序来说就是有数据输入我们程序,output就是我们程序输出数据到文件等.对象不能搞错了,否则就南辕北辙了. 通过不同的角度对流的输入输出功能进行分类: 按数据流的方向分为:输入流和输出流 按处理数据单位不同分为:字节流和字符流(2个字节) 按功能不同分为:节点流和处理流 输入流和输出流 JAVA JDK 所提供的所有流类型位于包 jav

【JavaSe】IO之FileReader

public class FileReaderDemo { public static void main(String[] args) { try { FileReader fr=new FileReader("abc.txt"); // int ch=fr.read(); // if(ch!=-1){ // System.out.println((char)ch); // } int ch=0; //读取的字符,如果已到达流的末尾,则返回 -1 while((ch=fr.read(

基于JavaSE阶段的IO流详解

1.IO流基本概述 在Java语言中定义了许多针对不同的传输方式,最基本的就是输入输出流(俗称IO流),IO流是属于java.io包下的内容,在JavaSE阶段主要学下图所示的: 其中从图中可知,所有输入流类都是抽象类,是InputStream或者抽象类Reader的子类:而所有输出流都是抽象类,是OutputStream或者Writer的子类.输入输出流的定义是根据流向所决定的,我们可以是本地为一个实体物质,从外界往本地输入,按照本地的状态就是读取,反之,从本地向外写入就是输出.IO流是最基本

JavaSE中主要的类与方法

1.instanceof:测试左边的对象是否是右边类的实例;  数组.length:返回的是数组的长度; 2.Scanner类 nextInt():读取键盘录入的整数;  next():读取键盘录入的字符串   nextLIne():读取键盘录入的一行 3.Math类: int min():求最小值;  int max():求最大值  long round():四舍五入;  double ceil():向上取整;  double floor():向下取整; 4.String类: int leng

node的socket.io的广播消息

在多个客户端与服务器端建立连接后,socket.io()服务器具有一个sockets属性,属性值为所有与客户端建立连接的socket对象.可以利用该对象的send方法或emit方法向所有客户端广播消息. io.sockets.send("user commected); io.socket.emit("login",names); 案例 server.js代码: 1 var express=require("express"); 2 var http=re

文件IO流完成文件的复制(复杂版本主要用来演示各种流的用途,不是最佳复制方案哦)

package io; import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;

如何自学 Java 开发

如何自学 Java 开发? 568赞同反对,不会显示你的姓名 李艾米IT路上学习 568 人赞同 Java Web前端技术 HTML 入门视频课程 1 HTML 简介 2 HTML基本结构[ 3 HTML的BODY标签以及颜色的设定 4 HTML之br标签 5 HTML之p标签 6 HTML之pre标签. 7 HTML之center 8 HTML之引文标签 9 HTML之hr 10 HTML之address 11 HTML之meta 标签 12 HTML之特殊字符 13 HTML之注释 14 H

深入理解Java中的流---结合Hadoop进行详解

在JavaSe的基础课程当中,可以说流是一个非常重要的概念,并且在Hadoop中得到了广泛的应用,本篇博客将围绕流进行深入的详解. (一)JavaSe中流的相关概念 1.流的定义 ①在Java当中,若一个类专门用于数据传输,则这个类称为流 ②流就是程序和设备之间嫁接以来的一根用于数据传输的管道,这个设备可以是本地硬盘,可以是内存条,也可以是网络所关联的另外一台计算机等等,其中不同管道上有不同的按钮,按下不同的按钮相当于调用不同的方法,这根带按钮的用于数据传输的管道就是流,即流就是一根管道 ③流一