教育资源网站建设,广州番禺网站制作推广,plone网站开发,模板网站 可以做推广吗在Java.io包中提供了一系列用于处理输入/输出的流类。从功能上分为两类#xff1a;输入流和输出流。从六结构上可分为#xff1a;字节流#xff08;以字节为处理单位#xff09;和字符流#xff08;以字符为处理单位#xff09;。
字符是由字节组成。在Java中所有字符用…在Java.io包中提供了一系列用于处理输入/输出的流类。从功能上分为两类输入流和输出流。从六结构上可分为字节流以字节为处理单位和字符流以字符为处理单位。
字符是由字节组成。在Java中所有字符用Unicode编码占两个字节。
如果将“中”以字节输出则对方收到的内容为两个字节, 但是可能是乱码。 如果将“中”以字符输出则对方收到的内容为“中”也占两个字节。
字节流的输入流和输出流的基础类是InputStream和OutputStream这两个抽象类具体的输入/输出操作则由这两个类的子类完成。
字符流的输入流和输出流的基础类是Reader和Writer这两个抽象类。
Java中还提供了一个特殊类RandomAccessFile它允许对文件进行随机访问使用该类的对象可以实现同时对文件进行输入读文件或输出写文件操作。
InputStream类中的常用方法
int available()获得从输入流中所能读取的字节的个数void close()关闭输入流int read()读取输入流中的下一个字节返回该字节的ASCII值范围在0255之间若流结束则返回-1int read(byte []a)从输入流中读取字节并存储到字节数组a中。返回值为实际读取的字节数若流结束返回-1int read(byte []a, int off, int length)从输入流中读取长度为length个字节的数据并存储于数组a索引off位置开始处并返回读取的字节数若流结束则返回-1long skip(long a)从当前位置开始跳过a个字节的数据
OutputStream类中的常用方法
int flush()刷空输出流并输出所有被缓存的字节void write(int a)将指定的字节a写入输出流。如果a的值大于255则只输出它的低位字节所表示的值void write(byte []a)把字节数组a中的字节数据全部写入输出流void write(byte []a, int off, int length)把字节数组a中从索引off开始的length个字节写入输出流void close() 关闭输出流
常用的文件处理
文件的顺序读写
一般操作步骤
引入java.io包import java.io.*;根据不同的数据源和输入输出任务建立字节流和字符流对象若需要对字节或字符流信息组织加工在已建立字节流或字符流对象上哦固件数据流对象。用输入/输出流对象的相应成员方法景行读写操作关闭流对象
文件读写字节流类指的是FileInputStream类和FileOutputStream类它们都重写或实现了其父类InputStream和OutputStream类的一些方法以实现顺序访问本地文件。它们都是以字节为单位顺序读写一个已存在的文件。
FileInputStream类构造方法有
FileInputStream(String filename)用文件名filename创建输入流对象
FileInputStream fis new FileInputStream(d:\\intest.dat);FileInputStream(File file)用文件对象创建输入流对象如 File file new File(d:\\intest.dat);FileInputStream fis new FileInputStream(file);若输入流对象创建失败如对应的文件不存在时将会引发异常FileNotFoundException在程序中需要对其捕获和处理。 从文件中读取信息。一般用read()成员方法进行读取信息操作。
创建文件输出字节流FileOutputStream对象。可以用文件名、文件对象建立文件输出字节流对象。创建输出字节流对象时若指定的文件不存在则会自动建立一个新文件如果指定的文件已存在则该文件的内容将被保留或删除。
FileOutputStream类的构造方法有
FileOutputStream(String filename) 用文件名filename创建输出流对象FileOutputStream(File file)用文件对象创建输出流对象
向文件中写入数据。一般用write()成员方法向文件中写入数据 无论是读文件还是写文件操作完毕后应该关闭输入流和输出流以释放资源。关闭的方式有两种显示关闭和隐式关闭。隐式关闭是利用Java系统的自动垃圾回收功能自动完成但完成的时机不能确定。显示关闭使用close()方法建议用显示方式主动关闭流。
例如
//写文件
package fileio;
import java.io.FileOutputStream;
public class FileOutputTest1
{ public static void main(String[] args) throws Exception { FileOutputStream fos new FileOutputStream(c:\\info.txt); //注意是双反斜杠String msg hello;fos.write(msg.getBytes()); //使用字符串的getBytes方法得到字节数组fos.close(); }
} //读文件
package fileio;
import java.io.File;
import java.io.FileInputStream;
public class FileInputTest1
{ public static void main(String[] args) throws Exception { File file new File(c:\\info.txt); FileInputStream fis new FileInputStream(file); byte[] data new byte[(int)file.length()];fis.read(data); fis.close(); String msg new String(new String(data)); System.out.println(msg); }
} 例如实现一个文件复制功能的程序
import java.io.*;
public class CopyFile
{public static void main(String[] args) {int dt;FileInputStream fis;FileOutputStream fos;try{ fis new FileInputStream(args[0]);}catch(FileNotFoundException e){System.out.println(源文件未找到);return;}try{ fos new FileOutputStream(args[1]);}catch(FileNotFoundException e){System.out.println(目标文件打开失败);return;}try{while((dtfis.read())!-1)//进行复制{fos.write(dt);}}catch(IOException e){System.out.println(文件读写出错);}finally{fis.close();fos.close();}}
}
文件字节流FileInputStream和FileOutputStream类只能提供纯字节或字节数组的输入/输出操作如果要进行基于Java基本数据类型如整数或浮点数等的输入/输出则要用到过滤流FilterInputStream类和FilterOutputStream类的各种子类。
过滤流对象必须与一个输入类或输出类联系起来而不能直接使用文件名或文件对象来建立。
使用数据文件流DataInputStream类和DataOutputStream类读写文件
首先使用前面的方法建立文件字节流对象然后基于文件字节流对象建立数据文件流对象再用此对象的方法对文件进行基于基本数据类型数据的读写操作。
DataInputStream类的构造方法为
DataInputStream(InputStream in)通过输入流对象in创建输入数据文件流对象。 DataOutputStream类的构造方法为DataOutputStream(OutputStream out)创建输出数据文件流对象并写数据到OutputStream对象out。
数据文件流对象不仅能读写数据流还能读写各种Java语言的基本数据类型数据如int、float、double等。 求100以内的所有素数并把结果写入D盘的data.dat文件中最后再以每行10个数的方式显示出data.dat文件的内容。
import java.io.*;
public class PrimeList
{public static void main(String[] args) {int count 0; //用于统计素数数目try{ OutputStream fos new FileOutputStream(d:\\data.dat);DataOutputStream dos new DataOutputStream(fos); for(int i2; i100; i){if(isPrime(i)){dos.writeInt(i); count;}}fos.close();}catch(IOException e){System.out.println(e.toString());}try{InputStream fis new FileInputStream(d:\\data.dat);DataInputStream dis new DataInputStream(fis);for(int i0; icount; i){if(i%100)System.out.println();//每行只显示10个数System.out.printf(%5d, dis.readInt());}fis.close();}catch(IOException e){System.out.println(e.toString());}}使用BufferedInputStream和BufferedOutputStream类读写文件
这两个类称之为字节缓冲流。如果文件的读写数据量较多时使用字节缓冲流类对象可以提高文件读写操作的效率。字节缓冲流对象会建立一个内部缓冲区输入/输出数据首先会读写到缓冲区进行操作当缓冲区满或关闭字节缓冲流时一次性输出到对应流也可使用flush()方法主动将缓冲区数据输出到对应流这样可以极大地减少磁盘读写次数提高了文件操作效率。
BufferedInputStream类的构造方法
BufferedInputStream(InputStream in)创建缓冲输入流对象保存in流对象并创建一个内部缓冲区来保存输入数据。BufferedInputStream(InputStream in, int size)创建缓冲输入流对象保存in流对象并创建一个指定大小为size个字节的内部缓冲区来保存输入数据。
BufferedOutputStream类的构造方法
BufferedOutputStream(OutputStream out)创建输出缓冲流对象并创建一个默认大小为512个字节的内部缓冲区写数据到参数所指定的输出流out对象。BufferedOutputStream(OutputStream out, int size)创建输出缓冲流对象并创建一个指定大小为size个字节的内部缓冲区写数据到参数所指定的输出流out对象。
flush()方法用于在程序结束之前主动将缓冲区里的数据输出到对应的输入/输出流。可以通过输入/输出缓冲流对象进行显示调用。
BufferedInputStream类提供了与FileInputStream类同样的读文件操作方法BufferedOutputStream类提供了与FileOutputStream类同样的写文件操作方法唯一的区别是所有读写操作的数据首先进入到缓冲区在必要时缓冲区满、关闭流或调用flush()方法才输出到对应的流中。
使用PrintStream类写文件
PrintStream类提供了把Java的任何类型数据转换为字符串类型数据输出的功能。输出时经常使用的方法有print()、println()和printf()。
创建PrintStream类的对象时需要在OutputStream类对象的基础上进行。PrintStream类的构造方法有
PrintStream(OutputStream out)创建一个打印流对象。PrintStream(OutputStream out, boolean autoFlush)创建一个打印流对象。
用java.io.PrintStream写文件更加简便。 我们可以调用PrintStream类里面的函数来进行输出操作其功能主要是各个print函数和println函数使用方法和System.out类似。
package fileio;
import java.io.FileOutputStream;
import java.io.PrintStream;
public class PrintStreamTest1
{ public static void main(String[] args) throws Exception { PrintStream ps new PrintStream(new FileOutputStream(c:\\info.txt)); String msg hello; ps.println(msg); ps.close(); }
}字符流
使用Reader类和Writer类的子类对象可以处理以字符为单位的输入/输出操作。字符流中将所有的内容看成一个个字符Character占据2个字节英文字符也不例外。在Java中所有字符输入流的父类是java.io. Reader所有字符输出流的父类是java.io.Writer。