「javaio读写」java nio读写文件

博主:adminadmin 2023-03-19 03:42:08 448

今天给各位分享javaio读写的知识,其中也会对java nio读写文件进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

java 如何用io流 读取list集合里我需要的内容,然后写入到.txt文件里?各位大侠请赐教

import org.junit.Test;

import java.io.*;

import java.util.ArrayList;

import java.util.List;

public class TestIo {

    //路径

    private static final String PATH = "D:\\demo1.txt";

    @Test

    public void testIo() throws IOException {

        ListString list = new ArrayList();

        list.add("1");

        list.add("2");

        list.add("3");

        list.add("4");

        list.add("5");

        File file = new File(PATH);

        //如果没有文件就创建

        if (!file.isFile()) {

            file.createNewFile();

        }

        //

        BufferedWriter writer = new BufferedWriter(new FileWriter(PATH));

            for (String l:list){

                writer.write(l);

            }

            writer.close();

        System.out.println("完成");

    }

}

结果

希望对你有帮助

关于java的io读写,缓冲区是如何提高读写效率的???

给你一个例子自己看看吧,加深理解

我们知道Java中一般的输入输出流类都是用单字节的读取方法来进行I/O操作的,也就是说每次只读写一个字节的数据,这种方法显然繁琐低效。如果从设备读取10M的文件,每次读取一个字节,完成操作将需要做10M/次I/O操作,I/O操作又是一件相当耗时的事情,无疑在很大程度上降低了系统的性能。

Java中专门提供提高I/O效率的缓冲类,这好比在数据读写时提供一个临时缓冲区,每次读取一个缓冲区大小的数据,将这数据库一次性写入目标设备。下图中分别为两种读取方式。

举个简单例子,在A地有10000本书需要搬到B地,如果一次搬1本,需要10000次。如果每次取1000本放到一个货车上,运到B地,需要10次完成。货车相当于是缓存区。同样道理,开设一个数据缓存区每次读取一数据块对于提高读取效率有显著提升。下面用一个具体代码示例来表示二者的性能差别。

Java代码

import java.io.BufferedInputStream;

import java.io.BufferedOutputStream;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

public class TestBuffer {

public static void main(String args[]) throws IOException {

String from = "f:/1.MP3";

System.out.println(from);

long startTime1 = System.currentTimeMillis();

TestBuffer.readWriteWithBuffer(from, "f:/2.MP3");

long endTime1 = System.currentTimeMillis();

System.out.println("使用缓冲区读取耗时:" + (endTime1 - startTime1) +"ms");

long startTime = System.currentTimeMillis();

TestBuffer.readWrite(from,"f:/3.MP3");

long endTime = System.currentTimeMillis();

System.out.println("直接读取耗时:" + (endTime - startTime) +"ms");

}

public static void readWrite(String from, String to) throws IOException {

InputStream in = null;

OutputStream out = null;

try {

in = new FileInputStream(from);

out = new FileOutputStream(to);

while (true) {

int data = in.read();

if (data == -1) {

break;

}

out.write(data);

}

} finally {

if (in != null) {

in.close();

}

if (out != null) {

out.close();

}

}

}

/***************************************************************************

* 使用缓存区读写文件

* @param from

* @param to

* @throws IOException

*/

public static void readWriteWithBuffer(String from, String to)

throws IOException {

InputStream inBuffer = null;

OutputStream outBuffer = null;

try {

inBuffer = new BufferedInputStream(new FileInputStream(from));

outBuffer = new BufferedOutputStream(new FileOutputStream(to));

while (true) {

int data = inBuffer.read();

if (data == -1) {

break;

}

outBuffer.write(data);

}

} finally {

if (inBuffer != null) {

inBuffer.close();

}

if (outBuffer != null) {

outBuffer.close();

}

}

}

}

运行例子时会根据mp3文件的大小决定运行时间的长短,尽量使用小一点的mp3文件,运行时需耐心等待一段时间

Java中的I/O流的基本知识

1、与外部设备和其它计算机进行交流的输入输出操作,尤其是对磁盘的文件操作,是计算机程序重要的功能,任何计算机语言都必须对输入输出提供支持。Java也不例外,它的输入输出类库中包含了丰富的系统工具,这些类被放在java.io包中。在该类库中,除了定义文件输入输出操作外,还定义了许多用来和其他外设进行信息交换的类。

2、流(Stream)指的是在计算机的输入与输出之间运动的数据序列:输入流代表从外设流入计算机的数据序列;输出流代表从计算机流向外设的数据序列。

流式输入输出是一种很常见的输入输出方式,它最大的特点是数据的获取和发送均沿数据序列顺序进行:每一个数据都必须等待排在它前面的数据读入或输出之后才能被读写,每次读写操作处理的都是序列中剩余的未读写数据中的第一个,而不能够随意选择输入输出的位置。磁带机是实现流式输入输出的典型设备

3、InputStream和OutputStream是java.io包中的两个抽象类,他们分别是其他所有输入、输出流类的父类。其他所有输入流类都是继承了InputStream的基本输入功能并根据自身属性对这些功能加以扩充;同样,其他所有输出流类也都是继承了OutputStream类的基本输出功能并加以扩展的

4、File类是IO包中惟一代表磁盘文件本身的对象,File对象定义了一些与平台无关的方法来操纵文件

创建File类对象时需指明它所对应的文件或目录名。File类共提供了4个不同的构造方法,以不同的参数形式灵活地接收文件和目录名信息

5、FileReader和FileWrite类分别继承自Reader类和Writer类,继承关系如图6-2所示。FileReader类用于读取文件;FileWrite类用于将数据写入文件。在使用这两个类之前,必须调用其构造方法创建相应的对象,然后才能调用相应的read()或write()方法进行文件的读写操作

6、BufferedReader和BufferedWrite类分别继承自Reader类和Writer类,BufferedReader类用来从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。BufferedWrite类用于将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。

7、LineNumberReader类是BufferedReader类的直接子类。该类允许对文本输入数据流加入行号。

此类定义了方法setLineNumber(int)和getLineNumber(),它们可分别用于设置和获取当前行号。默认情况下,行编号从0开始。该行号随数据读取在每个行结束符处递增,并且可以通过调用setLineNumber(int)更改行号。但要注意的是,setLineNumber(int)不会实际更改流中的当前位置;它只更改将由getLineNumber()返回的值

8、LineNumberReader类是BufferedReader类的直接子类。该类允许对文本输入数据流加入行号。

此类定义了方法setLineNumber(int)和getLineNumber(),它们可分别用于设置和获取当前行号。默认情况下,行编号从0开始。该行号随数据读取在每个行结束符处递增,并且可以通过调用setLineNumber(int)更改行号。但要注意的是,setLineNumber(int)不会实际更改流中的当前位置;它只更改将由getLineNumber()返回的值使用RandomAccessFile类随机读写文件时,在创建了一个RandomAccessFile对象之后,该文件即对文件描述句柄处于打开状态。此时,文件的指针处于文件开始位置。可以通过seek(long pos)方法设置文件指针的当前位置,以进行文件的快速定位,然后使用相应的read()和write()方法对文件进行读写操作。在对文件的读写操作完成后,调用close()方法关闭文件

9、FileInputStream和FileOutputStream类主要用来处理以“位为主”的输入输出操作。其中,FileInputStream类继承于InputStream类;FileOutputStream类继承于OutputStream类。

与RandomAccessFile类所不同的是,FileInputStream和FileOutputStream类中提供的文件处理方式是文件中数据流的顺序读写,而不是利用文件指针进行定位的随机读写

10、Java中的PipedInputStream和PipedOutputStream类提供了利用管道方式进行数据输入输出管理。管道流用来将一个程序或者线程的输出连接到另外一个程序或线程作为输入,使得相连线程能够通过PipedInputStream和PipedOutputStream类进行数据交换。

PipedInputStream和PipedOutputStream类也是InputStream和OutputStream类的直接子类。这两个类必须结合使用,其中,管道输入流作为管道的接收端、管道输出流作为管道的发送端,在程序设计中应注意数据的传输方向

顺序输入流SequenceInputStream是InputStream的直接子类,其功能是将多个输入流连接在一起,形成单一的输入数据流,没有对应的输出数据流存在。

顺序输入流SequenceInputStream由多个输入流构造而成,它从输入流的有序集合开始,并从第一个输入流开始读取,直到文件末尾,接着从第二个输入流读取,依次类推,直到到达顺序输入流包含的最后一个输入流的文件末尾为止

Java中对文件进行读写操作的基本类是什么?

Java.io包中包括许多类提供许多有关文件的各个方面操作。\x0d\x0a1 输入输出抽象基类InputStream/OutputStream ,实现文件内容操作的基本功能函数read()、 write()、close()、skip()等;一般都是创建出其派生类对象(完成指定的特殊功能)来实现文件读写。在文件读写的编程过程中主要应该注意异常处理的技术。 \x0d\x0a2 FileInputStream/FileOutputStream: \x0d\x0a用于本地文件读写(二进制格式读写并且是顺序读写,读和写要分别创建出不同的文件流对象); \x0d\x0a本地文件读写编程的基本过程为: \x0d\x0a① 生成文件流对象(对文件读操作时应该为FileInputStream类,而文件写应该为FileOutputStream类); \x0d\x0a② 调用FileInputStream或FileOutputStream类中的功能函数如read()、write(int b)等)读写文件内容; \x0d\x0a③ 关闭文件(close())。 \x0d\x0a3 PipedInputStream/PipedOutputStream: \x0d\x0a用于管道输入输出(将一个程序或一个线程的输出结果直接连接到另一个程序或一个线程的输入端口,实现两者数据直接传送。操作时需要连结); \x0d\x0a4管道的连接: \x0d\x0a方法之一是通过构造函数直接将某一个程序的输出作为另一个程序的输入,在定义对象时指明目标管道对象 \x0d\x0aPipedInputStream pInput=new PipedInputStream(); \x0d\x0aPipedOutputStream pOutput= new PipedOutputStream(pInput); \x0d\x0a方法之二是利用双方类中的任一个成员函数 connect()相连接 \x0d\x0aPipedInputStream pInput=new PipedInputStream(); \x0d\x0aPipedOutputStream pOutput= new PipedOutputStream(); \x0d\x0apinput.connect(pOutput); \x0d\x0a5 管道的输入与输出: \x0d\x0a输出管道对象调用write()成员函数输出数据(即向管道的输入端发送数据);而输入管道对象调用read()成员函数可以读起数据(即从输出管道中获得数据)。这主要是借助系统所提供的缓冲机制来实现的。 \x0d\x0a6随机文件读写: \x0d\x0aRandomAccessFile类(它直接继承于Object类而非InputStream/OutputStream类),从而可以实现读写文件中任何位置中的数据(只需要改变文件的读写位置的指针)。 \x0d\x0a随机文件读写编程的基本过程为: \x0d\x0a① 生成流对象并且指明读写类型; \x0d\x0a② 移动读写位置; \x0d\x0a③ 读写文件内容; \x0d\x0a④ 关闭文件。\x0d\x0a\x0d\x0a七里河团队答疑助人,希望我的回答对你有所帮助

java中怎么用io流读写文件

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.FileReader;

import java.io.FileWriter;

import java.io.IOException;

public class Test14 {

    public static void main(String[] args) throws IOException {

        String fPath = "C:/test.txt";

        // 读

        BufferedReader br = new BufferedReader(new FileReader(fPath));

        System.out.println(br.readLine());

        br.close();// // 使用后记得关闭

        // 写

        BufferedWriter bw = new BufferedWriter(new FileWriter(fPath));

        bw.write("写一段话到文件里");

        bw.flush();

        bw.close();// 使用后记得关闭

    }

}

关于javaio读写和java nio读写文件的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。