jcsyl_mshot的博客

他山之石

JAVA IO

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 
个人分类: Java基础
上一篇二叉树中路径相关问题
下一篇Java NIO
想对作者说点什么? 我来说一句

java IO文档

2018年02月03日 3.92MB 下载

JAVA IO 输入输出流

2008年10月17日 11KB 下载

javaIO文件流

2008年12月29日 1KB 下载

java 文件操作相关命令

2010年03月04日 284KB 下载

Java的例外处理和IO

2009年04月25日 106KB 下载

java io reader

2010年03月30日 39KB 下载

java io 结构图

2009年07月23日 120KB 下载

JAVA IO流小结

2011年08月29日 27KB 下载

java io读写文件例子

2011年04月04日 784B 下载

JAVA教程IO流操作

2010年11月12日 37KB 下载

没有更多推荐了,返回首页

关闭
关闭