jsp中使用字节流读写文件

阅读 26

2024-11-28

在java.io包中操作文件内容的主要有两大类:字节流、字符流,两类都分为输入和输出操作。在字节流中输出数据主要是使用OutputStream完成,输入使的是InputStream,在字符流中输出主要是使用Writer类完成,输入主要是使用Reader类完成。 

        在JAVA中IO操作也是有相应步骤的,以文件操作为例,主要的操作流程如下: 

        A、使用File类打开一个文件

        B、通过字节流或字符流的子类,指定输出的位置

        C、进行读/写操作

        D、关闭输入/输出

    

        字节流主要是操作byte类型数据,以byte数组为准,主要操作类就是OutputStream、InputStream。 

         字节输出流:OutputStream 

         字节输入流:InputStream 

        一、OutputStream 

        OutputStream类的常用方法 

No.

方法或常量

类型

描述

1

public void close() throws IOException

普通

关闭输出流

2

public void flush() throws IOException

普通

刷新缓冲区

3

public void write(byte[] b) throws IOException

普通

将一个byte数组写入数据流

4

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

普通

将一个指定范围的byte数组写入数据流

5

public abstract void write(int b) throws IOException

普通

将一个字节数据写入数据流

        要想使用以上方法,必须使用子类实例化,此时使用FileOutputStream子类,此类的构造方法如下:

        public FileOutputStream(File file) throws FileNotFoundException 

        例如:向文件中写入字符串。

        向文件中写入字节流的视频:



        1、在web目录中创建一个页面outputstream.jsp,如下图所示。

jsp中使用字节流读写文件_数组

完整代码如下。

<%@ page cnotallow="text/html;charset=UTF-8" language="java" %>
<%@page import="java.io.*" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%
    try {
        // 第1步、使用File类找到一个文件
        File f = new File("d:" + File.separator + "test.txt"); // 声明File对象
        // 第2步:通过子类实例化父类对象
 		// 准备好一个输出的对象
 	// 通过对象多态性,进行实例化
        // 第3步:进行写操作
 	// 准备一个字符串
        byte b[] = str.getBytes(); // 只能输出byte数组,所以将字符串变为byte数组
 				// 将内容输出,保存文件
 // 第4步:关闭输出流
        output.close();
        out.print("向文件写入数据结束");
    }catch (Exception e){
        e.printStackTrace();
    }

%>
</body>
</html>

        运行结果如下。

jsp中使用字节流读写文件_子类_02

jsp中使用字节流读写文件_子类_03

       上面操作中,如果重新执行程序,则肯定会覆盖文件中的已有内容,那么此时可以通过FielOutputStream向文件中追加内容,FileOutputStream的另外一个构造方法:

public FileOutputStream(File file,boolean append) throws FileNotFoundException

在构造方法中,如果将append的值设置为true,则表示在文件的末尾追加内容。

把上面代码修改如下。

<%@ page cnotallow="text/html;charset=UTF-8" language="java" %>
<%@page import="java.io.*" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%
    try {
        // 第1步、使用File类找到一个文件
        File f = new File("d:" + File.separator + "test.txt"); // 声明File对象
 // 第2步:通过子类实例化父类对象
 		// 准备好一个输出的对象
 output = new FileOutputStream(f,true); // 通过对象多态性,进行实例化
 // 第3步:进行写操作
 	// 准备一个字符串
        byte b[] = str.getBytes(); // 只能输出byte数组,所以将字符串变为byte数组
 				// 将内容输出,保存文件
 // 第4步:关闭输出流
        output.close();
        out.print("向文件写入数据结束");
    }catch (Exception e){
        e.printStackTrace();
    }

%>
</body>
</html>

运行结果如下。

jsp中使用字节流读写文件_数组_04

jsp中使用字节流读写文件_html_05


        二、字节输入流:InputStream

        字节输入流:InputStream的视频:


        既然程序可以向文件中写入内容,则就可以通过InputStream从文件中把内容读取进来,首先来看InputStream类的定义: 

        public abstract class InputStream extends Object implements Closeable

        与OutputStream类一样,InputStream本身也是一个抽象类,必须依靠其子类,如果现在是从文件中读取,子类肯定是FileInputStream。

        观察FileInputStream类的构造方法:

        public FileInputStream(File file) throws FileNotFoundException 

        InputStream类的常用方法

No.

方法或常量

类型

描述

1

public int available() throws IOException

普通

可以取得输入文件的大小

2

public void close() throws IOException

普通

关闭输入流

3

public abstract int read() throws IOException

普通

读取内容,以数字的方式读取

4

public int read(byte[] b) throws IOException

普通

将内容读到byte数组之中,同时返回读入的个数


        例如:从文件中读取内容

        1、在web目录中创建一个页面inputstream.jsp,如下图所示。

jsp中使用字节流读写文件_子类_06

完整代码如下。

<%@ page cnotallow="text/html;charset=UTF-8" language="java" %>
<%@page import="java.io.*" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%
    try {
        // 第1步、使用File类找到一个文件
        File f = new File("d:" + File.separator + "test.txt"); // 声明File对象
        // 第2步:通过子类实例化父类对象
        InputStream input = null; // 准备好一个输入的对象
        input = new FileInputStream(f); // 通过对象多态性,进行实例化
        // 第3步:进行读操作
        byte b[] = new byte[(int)f.length()]; // 所有的内容读到此数组之中,数组大小由文件决定
        input.read(b); // 将内容读出
        // 第4步:关闭输入流
        input.close(); // 关闭输入流
        out.println("内容为:" + new String(b)); // 把byte数组变为字符串输出
    }catch (Exception e){
        e.printStackTrace();
    }

%>
</body>
</html>

运行结果如下。

jsp中使用字节流读写文件_数组_07

















精彩评论(0)

0 0 举报