JAVA IO

原创 2018年04月17日 11:30:33

Java IO

Java 所有的文件操作类都在Java.io 包中。 注意五个类和一个接口。File OutputStream InputStream Writer Reader 一个接口是serializable。

File

public File(String pathname)// file 类构造方法

要使用一个File类,需要传递一个文件路径

import java.io.File;
import java.io.IOException;
public class FileDemo1{
    pubic static void main(String[] args){
        File f = new File("D:\\text.txt")
        try{
            f.createNewFIle();
        }catch(IOException e){
            e.printStaackTrace();
        }
    }
}

创建文件夹

File f = new File(".\\java\\io");
f.mkdir() && f.mkdirs()

RandomAccessFile 类

要对文件内容进行操作,使用randomAccessFile类。

public class RandomAccessFile implements DataOutput, DataInput, Closeable 
{//下面是常用API.    
//两个构造函数,指定操作文件.
  public RandomAccessFile(String name, String mode)
  public RandomAccessFile(File file, String mode)

  public int read() throws IOException
  public int read(byte b[], int off, int len) throws IOException 
  public void write(int b) throws IOException
  public void write(byte b[]) throws IOException
  public void seek(long pos) throws IOException //设置读指针的位置
  public final byte readByte() throws IOException
   public final int readInt() throws IOException
}
public  class random_access_file{
    public static void main(String[] args) throws Exception{
        File f = new File('text.txt');
        //读写方式打开文件,自动创建新文件
        RandomAcessFile fdf = new RandomAccessFile(f,'rw');
        String name = "xiaoming ";
        int age = 23;
        fdf.writeBytes(name);
        fdf.write(age);
        fdf.close();

        File f1 = new File('text.txt');
        RandomAccessFile rdf2 =new RandomAccessFile(f1,"r");
        byte[] b = new byte[8];
        for(int i=0;i<b.length;i++)
            b[i]=rdf2.readByte();
        String name1 = new String(b);

字节流于字符流基本操作

在程序中所有的数据都是以流的方式进行传输或者保存的,程序需要读取数据时要使用输入流读取数据,而当程序需要将一些数据保存起来时,就要使用输出流
io 包中流的操作主要有字节流,字符流两大类,两类都有输入和输出操作,在字节流中输出数据主要使用OutputStream 类完成,输入使用的是InputStream 类。在字符流中输出主要使用Writer类完成,输入主要使用Reader类完成。

操作流程如下

  • 使用file 类打开一个文件
  • 通过字节流或则字符流的子类制定输出的位置
  • 进行读写操作
  • 关闭输入输出
    流在实例化的时候需要传进去一个文件对象
字节流

OutputStream 是整个IO包中字节输出流的最大父类,定义如下

public abstruct class OutputStream extends Object implements Closeable, Flushable// 抽象类
里面主要定义了一个抽象方法,write().

InputStream 是整个IO包中字节输入流的最大父类,定义如下

public abstruct class InputStream extends Object implements Closeable, Flushable// 抽象类
里面主要定义了一个抽象方法,read().
字符流

在程序中一个字符相当于两个字节,Java提供了Reader 和Writer 两个专门操作字符流的类。
Writer 与outputStream 的操作流程并没有什么太大的去别,唯一的好处是,可以直接输出字符串,而不用将字符串变为byte[]数组之后再输出。Reader和Inputstream 也是类似。
reader inputstream 都是从文件(或其他)取数据 writer outputstream 往文件(或其他)写入数据

字节流在操作时本身不会用到缓冲区,是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再进行操作文件。所以字节流操作时不关闭也会有输入输出,字符流就不行,如果不关闭的话,就都在缓冲区里

转换流

outputStreamWriter 是writer的子类,将一个字符流的输出对象变为字节流输出对象。

inputStreamReader 是reader的子类,将一个字节流的输入对象变为字符流的输入对象。

System类对IO的支持

System类定义了三个常量

public static final PrintStream out// 对应系统标准输出,一般是显示器
public static final PrintStream err//错误信息输出
public static final InputStream in // 对应标准输入,一般是键盘

System.out
System.out 是printStream的对象,在printStream 中定义了一系列print()和println()方法,printStream 又是OutputStream的子类.

OutputStream out = System.out;
out.write("Helo".getBytes());

System.err
System.err 表示的是错误信息输出,如果程序出现错误,可以直接使用System.err 进行输出.

try
{
    System.out.print("hhh")
}catch (Exception e)
{
    System.err.println(e);
}

System.in
System.in 实际上是一个键盘的输入流,其本身是InputStream类型的对象,那么此时就可以利用System.in 完成从键盘读取数据的功能.

InputStream input =System.in;
byte[] b = new byte[1024];
int len = input.read(b);
System.out.println(new String(b,0,len));
//此方法不常用,因为要提前申请,更好的方法是将全部输入暂存到内存的一块地方,然后一次性从内存中读取数据

Scanner 类
JDK1.5后提供了专门的输入数据类,不只可以完成输入数据操作,也可以方便的对输入数据进行验证.
Scanner 可以接收任意的输入流.

对象序列化

对象序列化是把一个对象变为二进制的数据流的一种方法,通过序列化可以方便的实现对象的传输或者存储。如果一个类想被序列化,则对象所在的类必须实现 Java.io.serializable 接口, 此接口没有定义任何的方法,所以此接口是一个标识接口,表示一个类具备了被序列化的能力。

Java IO 总结

Java IO 主要关注的是从原始数据源的读取以及输出原始数据到目标媒介。原始的数据源包括了 文件,管道,网络连接,内存缓存。

通过IO 读文件
根据该文件是二进制文件还是文本文件来选择使用FileInputStream或者FileReader。这两个类允许你从文件开始到文件末尾一次读取一个字节或者字符。或者将读取到的字节或字符写到数组里。
Fileinputstream

InputStream input = new FileInputStream("c:\\data\\input-text.txt");
int data = input.read();while(data != -1) {
    //do something with data...
    doSomethingWithData(data);
    data = input.read();
}
input.close();
//中一个FileInputStream构造函数取一个File对象替代String对象作为参数。这里是一个使用该构造函数的例子:
File file = new File("c:\\data\\input-text.txt");
InputStream input = new FileInputStream(file);

通过IO 写文件
如果需要在不同端之间写文件,根据你要写入的数据是二进制型数据还是字符型数据选用FileOutputStream或者FileWriter。

OutputStream output = new FileOutputStream("c:\\data\\output-text.txt");
while(moreData) {
    int data = getMoreData();
    output.write(data);
}
output.close();

Java IO 管道
Java IO中的管道为运行在同一个JVM中的两个线程提供了通信的能力。所以管道也可以作为数据源以及目标媒介。

Java IO 网络
当两个进程之间建立了网络连接之后,他们通信的方式如同操作文件一样:利用InputStream读取数据,利用OutputStream写入数据。换句话来说,Java网络API用来在不同进程之间建立网络连接,而Java IO则用来在建立了连接之后的进程之间交换数据

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jcsyl_mshot/article/details/79972393
收藏助手
不良信息举报
您举报文章:JAVA IO
举报原因:
原因补充:

(最多只允许输入30个字)