加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java IO流

发布时间:2020-12-14 06:32:45 所属栏目:Java 来源:网络整理
导读:《文件传输基

《文件传输基础——Java IO流》学习笔记

1.编码问题

main(String[] args) = "慕课ABC"[] bytes1 = s.getBytes(); ( System.out.print(Integer.toHexString(b & 0xff) + " " </span><span style="color: #0000ff;"&gt;byte</span>[] bytes2 = s.getBytes("gbk"<span style="color: #000000;"&gt;); </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;c4 bd bf ce 41 42 43 </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;gbk 中文占2个字节 英文占1个字节</span> <span style="color: #0000ff;"&gt;for</span> (<span style="color: #0000ff;"&gt;byte</span><span style="color: #000000;"&gt; b: bytes2) { System.out.print(Integer.toHexString(b </span>&amp; 0xff) + " "<span style="color: #000000;"&gt;); } System.out.println(); </span><span style="color: #0000ff;"&gt;byte</span>[] bytes3 = s.getBytes("utf-8"<span style="color: #000000;"&gt;); </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;e6 85 95 e8 af be 41 42 43 </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;utf-8 中文占3个字节 英文占1个字节</span> <span style="color: #0000ff;"&gt;for</span> (<span style="color: #0000ff;"&gt;byte</span><span style="color: #000000;"&gt; b: bytes3) { System.out.print(Integer.toHexString(b </span>&amp; 0xff) + " "<span style="color: #000000;"&gt;); } System.out.println(); </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt; Java是双字节编码utf-16be</span> <span style="color: #0000ff;"&gt;byte</span>[] bytes4 = s.getBytes("utf-16be"<span style="color: #000000;"&gt;); </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;61 55 8b fe 0 41 0 42 0 43 </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;utf-16be中文占2个字节 英文占2个字节</span> <span style="color: #0000ff;"&gt;for</span> (<span style="color: #0000ff;"&gt;byte</span><span style="color: #000000;"&gt; b: bytes4) { System.out.print(Integer.toHexString(b </span>&amp; 0xff) + " "<span style="color: #000000;"&gt;); } System.out.println(); </span><span style="color: #008000;"&gt;/**</span><span style="color: #008000;"&gt; * 当字节序列采用某种编码时 将字节序列转换成字符串 也需要使用相同编码 </span><span style="color: #008000;"&gt;*/</span><span style="color: #000000;"&gt; String str1 </span>= <span style="color: #0000ff;"&gt;new</span><span style="color: #000000;"&gt; String(bytes4); System.out.println(str1); </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt; 乱码</span> String str2 = <span style="color: #0000ff;"&gt;new</span> String(bytes4,"utf-16be"<span style="color: #000000;"&gt;); System.out.println(str2); </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt; 正常</span>

<span style="color: #000000;"> }
}

文本文件 就是字节序列 可以是任意编码的字节序列

如果在中文机器上直接创建文本文件,那么该文件只认识ANSI编码,但是粘贴过来的文件可以是任意格式。

Eclipse中一个只能识别项目默认的编码。

2.File类

Java.io.File类用于表示文件/目录

File只用于表示文件信息(名称、大小等),不能用于文件内容的访问。

<span style="color: #0000ff;">import<span style="color: #000000;"> java.io.File;
<span style="color: #0000ff;">import<span style="color: #000000;"> java.io.IOException;

<span style="color: #0000ff;">public <span style="color: #0000ff;">class<span style="color: #000000;"> FileDemo {
<span style="color: #0000ff;">public <span style="color: #0000ff;">static <span style="color: #0000ff;">void<span style="color: #000000;"> main(String[] args) {
<span style="color: #008000;">//<span style="color: #008000;"> 构造函数
File file = <span style="color: #0000ff;">new File("E:javaio"<span style="color: #000000;">);
<span style="color: #0000ff;">if (!<span style="color: #000000;">file.exists())
file.mkdir();
<span style="color: #008000;">//<span style="color: #008000;"> 是否是一个目录
<span style="color: #000000;"> System.out.println(file.isDirectory());
<span style="color: #008000;">//<span style="color: #008000;"> 是否是一个文件
<span style="color: #000000;"> System.out.println(file.isFile());

    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;File file2 = new File("E:javaiomdzz.txt");</span>
    File file2 = <span style="color: #0000ff;"&gt;new</span> File("E:javaio","mdzz.txt"<span style="color: #000000;"&gt;);

    </span><span style="color: #0000ff;"&gt;if</span> (!<span style="color: #000000;"&gt;file2.exists()) {
        </span><span style="color: #0000ff;"&gt;try</span><span style="color: #000000;"&gt; {
            file2.createNewFile();
        } </span><span style="color: #0000ff;"&gt;catch</span><span style="color: #000000;"&gt; (IOException e) {
            </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt; TODO Auto-generated catch block</span>

<span style="color: #000000;"> e.printStackTrace();
}
} <span style="color: #0000ff;">else<span style="color: #000000;"> {
file2.delete();
}
System.out.println(file);
System.out.println(file.getAbsolutePath());
System.out.println(file.getName() + " " +<span style="color: #000000;"> file.getParent());
System.out.println(file2.getName() + " " +<span style="color: #000000;"> file2.getParent());
}
}

<div class="cnblogs_code" onclick="cnblogs_code_show('26e1cc31-9d94-4b40-a01a-bb669f3740df')">
<img id="code_img_closed_26e1cc31-9d94-4b40-a01a-bb669f3740df" class="code_img_closed" src="https://www.52php.cn/res/2019/02-05/22/1c53668bcee393edac0d7b3b3daff1ae.gif" alt=""><img id="code_img_opened_26e1cc31-9d94-4b40-a01a-bb669f3740df" class="code_img_opened" style="display: none;" onclick="cnblogs_code_hide('26e1cc31-9d94-4b40-a01a-bb669f3740df',event)" src="https://www.52php.cn/res/2019/02-05/22/405b18b4b6584ae338e0f6ecaf736533.gif" alt=""><div id="cnblogs_code_open_26e1cc31-9d94-4b40-a01a-bb669f3740df" class="cnblogs_code_hide">

<span style="color: #0000ff;">public <span style="color: #0000ff;">class<span style="color: #000000;"> FileUtils {
<span style="color: #008000;">//<span style="color: #008000;"> 列出指定目录下(包括子目录)所有文件
<span style="color: #0000ff;">public <span style="color: #0000ff;">static <span style="color: #0000ff;">void listDirectory(File dir) <span style="color: #0000ff;">throws<span style="color: #000000;"> IOException {
<span style="color: #0000ff;">if (!<span style="color: #000000;">dir.exists()) {
<span style="color: #0000ff;">throw <span style="color: #0000ff;">new IllegalArgumentException("目录:" + dir + "不存在."<span style="color: #000000;">);
}
<span style="color: #0000ff;">if (!<span style="color: #000000;">dir.isDirectory()) {
<span style="color: #0000ff;">throw <span style="color: #0000ff;">new IllegalArgumentException(dir+"不是目录."<span style="color: #000000;">);
}
<span style="color: #008000;">//<span style="color: #008000;">String[] filenames = dir.list(); <span style="color: #008000;">//<span style="color: #008000;"> 返回子目录名称的字符处数组
File[] files =<span style="color: #000000;"> dir.listFiles();
<span style="color: #0000ff;">for<span style="color: #000000;"> (File file: files) {
<span style="color: #0000ff;">if<span style="color: #000000;"> (file.isDirectory()) {
FileUtils.listDirectory(file);
} <span style="color: #0000ff;">else<span style="color: #000000;"> {
System.out.println(file);
}
}
}

</span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;static</span> <span style="color: #0000ff;"&gt;void</span> main(String[] args) <span style="color: #0000ff;"&gt;throws</span><span style="color: #000000;"&gt; IOException {
    FileUtils.listDirectory(</span><span style="color: #0000ff;"&gt;new</span> File("E:java"<span style="color: #000000;"&gt;));
}

}

3.RandomAccessFile

Java提供的对文件内容的访问类,读写文件。可以随机访问文件。

Java文件模型,在硬盘上是Byte存储,是数据的集合。

打开文件,有两种模式"rw"(读写),"r"(只读)

写方法,raf.write(int)-->只写一个字节(后八位)

读方法, int b=raf.read()-->读一个字节

读完文件一定要关闭。

<span style="color: #0000ff;">import<span style="color: #000000;"> java.io.File;
<span style="color: #0000ff;">import<span style="color: #000000;"> java.io.IOException;
<span style="color: #0000ff;">import<span style="color: #000000;"> java.io.RandomAccessFile;
<span style="color: #0000ff;">import<span style="color: #000000;"> java.util.Arrays;

<span style="color: #0000ff;">public <span style="color: #0000ff;">class<span style="color: #000000;"> RafDemo {

</span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;static</span> <span style="color: #0000ff;"&gt;void</span> main(String[] args) <span style="color: #0000ff;"&gt;throws</span><span style="color: #000000;"&gt; IOException {
    File demo </span>= <span style="color: #0000ff;"&gt;new</span> File("demo"<span style="color: #000000;"&gt;);
    </span><span style="color: #0000ff;"&gt;if</span> (!<span style="color: #000000;"&gt;demo.exists()) {
        demo.mkdir();
    }
    File file </span>= <span style="color: #0000ff;"&gt;new</span> File(demo,"raf.dat"<span style="color: #000000;"&gt;);
    </span><span style="color: #0000ff;"&gt;if</span> (!<span style="color: #000000;"&gt;file.exists()) {
        file.createNewFile();
    }

    RandomAccessFile raf </span>= <span style="color: #0000ff;"&gt;new</span> RandomAccessFile(file,"rw"<span style="color: #000000;"&gt;);
    System.out.println(raf.getFilePointer());

    raf.write(</span>'A'<span style="color: #000000;"&gt;); 
    System.out.println(raf.getFilePointer());
    raf.write(</span>'B'<span style="color: #000000;"&gt;);
    System.out.println(raf.getFilePointer());

    </span><span style="color: #0000ff;"&gt;int</span> i = 0x7fffffff<span style="color: #000000;"&gt;;
    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt; 用write方法每次只能写一个字节,如果要把i写进去就得写4次</span>
    raf.write(i >>> 24);<span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;高8位</span>
    raf.write(i >>> 16<span style="color: #000000;"&gt;);
    raf.write(i </span>>>> 8<span style="color: #000000;"&gt;);
    raf.write(i);
    System.out.println(raf.getFilePointer());

    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;可以直接写一个int</span>

<span style="color: #000000;"> raf.writeInt(i);
System.out.println(raf.getFilePointer());

    String s </span>= "中"<span style="color: #000000;"&gt;;
    </span><span style="color: #0000ff;"&gt;byte</span>[] gbk =<span style="color: #000000;"&gt; s.getBytes();
    raf.write(gbk);
    System.out.println(raf.length());

    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt; 读文件  必须把指针移到头部</span>
    raf.seek(0<span style="color: #000000;"&gt;);
    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt; 一次性读取  把文件中的内容都读到字节数组中</span>
    <span style="color: #0000ff;"&gt;byte</span>[] buf = <span style="color: #0000ff;"&gt;new</span> <span style="color: #0000ff;"&gt;byte</span>[(<span style="color: #0000ff;"&gt;int</span><span style="color: #000000;"&gt;)raf.length()];
    raf.read(buf);
    System.out.println(Arrays.toString(buf));

    </span><span style="color: #0000ff;"&gt;for</span> (<span style="color: #0000ff;"&gt;byte</span><span style="color: #000000;"&gt; b: buf) {
        System.out.print(Integer.toHexString(b </span>&amp; 0xff) + " "<span style="color: #000000;"&gt;);
    }

    raf.close();
}

}

4.字节流(char流)InputStream/OutputStream

1)字节流

InputStream(抽象类)抽象了应用程序读取数据方式

OutputStream(抽象类)抽象了应用程序写数据方式

2)EOF= End 读到-1就读到结束

3)输入流基本方法

  int b = in.read();//读取一个字节填充到int第八位 -1是EOF

  in.read(byte[] buf)

  in.read(byte p[] buf,int start,int size);

4)输出流基本方式

  out.write(int b) 写一个byte到流

  out.write(byte[] buf) 将buf字节数组写入到流

  out.write(byte[] buf,int size);

5)FileInputStream--->具体实现了在文件上读取数据

<div class="cnblogs_code" onclick="cnblogs_code_show('bec021d9-2061-48db-a56a-06190910b4bb')">
<img id="code_img_closed_bec021d9-2061-48db-a56a-06190910b4bb" class="code_img_closed" src="https://www.52php.cn/res/2019/02-05/22/1c53668bcee393edac0d7b3b3daff1ae.gif" alt=""><img id="code_img_opened_bec021d9-2061-48db-a56a-06190910b4bb" class="code_img_opened" style="display: none;" onclick="cnblogs_code_hide('bec021d9-2061-48db-a56a-06190910b4bb',event)" src="https://www.52php.cn/res/2019/02-05/22/405b18b4b6584ae338e0f6ecaf736533.gif" alt=""><div id="cnblogs_code_open_bec021d9-2061-48db-a56a-06190910b4bb" class="cnblogs_code_hide">

<span style="color: #0000ff;">import<span style="color: #000000;"> java.io.BufferedInputStream;
<span style="color: #0000ff;">import<span style="color: #000000;"> java.io.BufferedOutputStream;
<span style="color: #0000ff;">import<span style="color: #000000;"> java.io.DataInputStream;
<span style="color: #0000ff;">import<span style="color: #000000;"> java.io.DataOutputStream;
<span style="color: #0000ff;">import<span style="color: #000000;"> java.io.File;
<span style="color: #0000ff;">import<span style="color: #000000;"> java.io.FileInputStream;
<span style="color: #0000ff;">import<span style="color: #000000;"> java.io.FileNotFoundException;
<span style="color: #0000ff;">import<span style="color: #000000;"> java.io.FileOutputStream;
<span style="color: #0000ff;">import<span style="color: #000000;"> java.io.IOException;
<span style="color: #0000ff;">import<span style="color: #000000;"> java.io.InputStream;
<span style="color: #0000ff;">import<span style="color: #000000;"> java.io.ObjectInputStream;
<span style="color: #0000ff;">import<span style="color: #000000;"> java.io.ObjectOutputStream;
<span style="color: #0000ff;">import<span style="color: #000000;"> java.io.OutputStream;
<span style="color: #0000ff;">import<span style="color: #000000;"> java.io.Serializable;

<span style="color: #0000ff;">public <span style="color: #0000ff;">class<span style="color: #000000;"> TestIOStream {

</span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;static</span> <span style="color: #0000ff;"&gt;void</span> testFileInputStream() <span style="color: #0000ff;"&gt;throws</span><span style="color: #000000;"&gt; IOException {
    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt; 文件输入流</span>
    InputStream in = <span style="color: #0000ff;"&gt;new</span> FileInputStream("demo/test.txt"<span style="color: #000000;"&gt;);
    </span><span style="color: #0000ff;"&gt;int</span><span style="color: #000000;"&gt; x;
    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt; 读取文件demo/test.txt 读一个字节输出一个字节</span>
    <span style="color: #0000ff;"&gt;while</span> ((x = in.read()) != -1<span style="color: #000000;"&gt;) {
        System.out.print(x </span>+ " "<span style="color: #000000;"&gt;);
    }
    System.out.println();

    in </span>= <span style="color: #0000ff;"&gt;new</span> FileInputStream(<span style="color: #0000ff;"&gt;new</span> File("demo/test.txt"<span style="color: #000000;"&gt;));
    </span><span style="color: #0000ff;"&gt;byte</span>[] b = <span style="color: #0000ff;"&gt;new</span> <span style="color: #0000ff;"&gt;byte</span>[20<span style="color: #000000;"&gt;];
    </span><span style="color: #0000ff;"&gt;int</span> off = 3<span style="color: #000000;"&gt;;
    </span><span style="color: #0000ff;"&gt;int</span> len = 10<span style="color: #000000;"&gt;;
    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt; 读取文件内容到数字b,从b[off]位置写入,最多读len长度的字节
    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt; in.read(byte[] b) 相当于 read(b,b.length)</span>
    <span style="color: #0000ff;"&gt;while</span> ((x = in.read(b,off,len)) != -1<span style="color: #000000;"&gt;) {
        </span><span style="color: #0000ff;"&gt;for</span> (<span style="color: #0000ff;"&gt;byte</span><span style="color: #000000;"&gt; bb: b)
            System.out.print(bb </span>+ " "<span style="color: #000000;"&gt;);
        System.out.println();
    }
    in.close();
}


</span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;static</span> <span style="color: #0000ff;"&gt;void</span> testFileOutputStream() <span style="color: #0000ff;"&gt;throws</span><span style="color: #000000;"&gt; IOException {
    OutputStream out </span>= <span style="color: #0000ff;"&gt;new</span> FileOutputStream("demo/test.txt"<span style="color: #000000;"&gt;);
    </span><span style="color: #0000ff;"&gt;int</span> i = 0x01020304<span style="color: #000000;"&gt;;
    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt; 只能写一字节到文件 蓝儿int有4字节 所以只输入了低8位 也就是04</span>

<span style="color: #000000;"> out.write(i);
<span style="color: #0000ff;">byte[] b = {(<span style="color: #0000ff;">byte)0xA,(<span style="color: #0000ff;">byte)0xB,(<span style="color: #0000ff;">byte)0xC,(<span style="color: #0000ff;">byte)0xD,(<span style="color: #0000ff;">byte)0xE,(<span style="color: #0000ff;">byte)0xF<span style="color: #000000;">};
<span style="color: #008000;">//<span style="color: #008000;"> 把字节数组写入文件
<span style="color: #000000;"> out.write(b);
<span style="color: #008000;">//<span style="color: #008000;"> 向文件写入b[off] b[off+1] ... b[off+len-1]
<span style="color: #0000ff;">int off = 1,len = 2<span style="color: #000000;">;
out.write(b,len);
out.close();
}

</span><span style="color: #0000ff;"&gt;static</span> <span style="color: #0000ff;"&gt;class</span> People <span style="color: #0000ff;"&gt;implements</span><span style="color: #000000;"&gt; Serializable {
    String name;
    </span><span style="color: #0000ff;"&gt;int</span><span style="color: #000000;"&gt; age;
    People() {}
    People(String name,</span><span style="color: #0000ff;"&gt;int</span><span style="color: #000000;"&gt; age) {
        </span><span style="color: #0000ff;"&gt;this</span>.name =<span style="color: #000000;"&gt; name;
        </span><span style="color: #0000ff;"&gt;this</span>.age =<span style="color: #000000;"&gt; age;
    }
    </span><span style="color: #0000ff;"&gt;public</span><span style="color: #000000;"&gt; String toString() {
        </span><span style="color: #0000ff;"&gt;return</span> "name:" + name + ",age:" +<span style="color: #000000;"&gt; age;
    }
}

</span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;static</span> <span style="color: #0000ff;"&gt;void</span> testObjectStream() <span style="color: #0000ff;"&gt;throws</span><span style="color: #000000;"&gt; FileNotFoundException,IOException,ClassNotFoundException {
    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt; 文件输出流    构造函数的参数是OutputStream 把对象序列化写入文件</span>
    ObjectOutputStream oos = <span style="color: #0000ff;"&gt;new</span> ObjectOutputStream(<span style="color: #0000ff;"&gt;new</span> FileOutputStream("demo/test.txt"<span style="color: #000000;"&gt;));
    People p1 </span>= <span style="color: #0000ff;"&gt;new</span> People("张三",21<span style="color: #000000;"&gt;);
    People p2 </span>= <span style="color: #0000ff;"&gt;new</span> People("李四",22<span style="color: #000000;"&gt;);
    oos.writeObject(p1);
    oos.writeObject(p2);
    oos.close();
    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt; 对象输入流  构造函数的参数是InputStream</span>
    ObjectInputStream ois = <span style="color: #0000ff;"&gt;new</span> ObjectInputStream(<span style="color: #0000ff;"&gt;new</span> FileInputStream("demo/test.txt"<span style="color: #000000;"&gt;));
    People p </span>=<span style="color: #000000;"&gt; (People)ois.readObject();
    System.out.println(p);
    p </span>=<span style="color: #000000;"&gt; (People)ois.readObject();
    System.out.println(p);
    ois.close();
}

</span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;static</span> <span style="color: #0000ff;"&gt;void</span> testBufferedStream() <span style="color: #0000ff;"&gt;throws</span><span style="color: #000000;"&gt; IOException {
    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt; 通过设置缓存区提高存取效率</span>
    BufferedInputStream bis = <span style="color: #0000ff;"&gt;new</span> BufferedInputStream(<span style="color: #0000ff;"&gt;new</span> FileInputStream("demo/test.txt"<span style="color: #000000;"&gt;));
    BufferedOutputStream bos </span>= <span style="color: #0000ff;"&gt;new</span> BufferedOutputStream(<span style="color: #0000ff;"&gt;new</span> FileOutputStream("demo/test1.txt"<span style="color: #000000;"&gt;));
    </span><span style="color: #0000ff;"&gt;int</span><span style="color: #000000;"&gt; i;
    </span><span style="color: #0000ff;"&gt;while</span> ((i = bis.read()) != -1<span style="color: #000000;"&gt;) {
        bos.write(i);
    }
    bos.flush();
    bis.close();
    bos.close();
}

</span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;static</span> <span style="color: #0000ff;"&gt;void</span> testDataStream() <span style="color: #0000ff;"&gt;throws</span><span style="color: #000000;"&gt; IOException {
    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt; 设置模式——>装饰模式
    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt; 按格式读取</span>
    String file = "demo/dos.dat"<span style="color: #000000;"&gt;;
    DataOutputStream dos </span>= <span style="color: #0000ff;"&gt;new</span> DataOutputStream(<span style="color: #0000ff;"&gt;new</span><span style="color: #000000;"&gt; FileOutputStream(file));
    dos.writeInt(</span>10<span style="color: #000000;"&gt;);
    dos.writeLong(</span>-10L<span style="color: #000000;"&gt;);
    dos.writeDouble(</span>10.5<span style="color: #000000;"&gt;);
    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt; 采用utf-8编码</span>
    dos.writeUTF("张三"<span style="color: #000000;"&gt;);
    dos.close();

    DataInputStream dis </span>= <span style="color: #0000ff;"&gt;new</span> DataInputStream(<span style="color: #0000ff;"&gt;new</span><span style="color: #000000;"&gt; FileInputStream(file));
    </span><span style="color: #0000ff;"&gt;int</span> i =<span style="color: #000000;"&gt; dis.readInt();
    </span><span style="color: #0000ff;"&gt;long</span> l =<span style="color: #000000;"&gt; dis.readLong();
    </span><span style="color: #0000ff;"&gt;double</span> d =<span style="color: #000000;"&gt; dis.readDouble();
    System.out.println(i </span>+ "," + l + "," +<span style="color: #000000;"&gt; d);
    String s </span>=<span style="color: #000000;"&gt; dis.readUTF();
    System.out.println(s);
    dis.close();
}

</span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;static</span> <span style="color: #0000ff;"&gt;void</span> main(String[] args) <span style="color: #0000ff;"&gt;throws</span><span style="color: #000000;"&gt; IOException,ClassNotFoundException {
    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;testFileOutputStream();
    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;testFileInputStream();
    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;testObjectStream();
    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;testBufferedStream();</span>

<span style="color: #000000;"> testDataStream();
}
}

5.字符流

字符流处理的一般是文本文件

1、字符流的基本实现

??完成byte流解析为char流,按照编码解析

??提供char流到byte流。

2、

FileWriter/FileWriter : 和InputStreamReader/OutputStreamWriter功能差不多,但是字符编码等设置是默认的。

3、字符流的过滤器

BufferedReader/BufferedWriter

<span style="color: #0000ff;">import<span style="color: #000000;"> java.io.BufferedReader;
<span style="color: #0000ff;">import<span style="color: #000000;"> java.io.BufferedWriter;
<span style="color: #0000ff;">import<span style="color: #000000;"> java.io.FileInputStream;
<span style="color: #0000ff;">import<span style="color: #000000;"> java.io.FileNotFoundException;
<span style="color: #0000ff;">import<span style="color: #000000;"> java.io.FileOutputStream;
<span style="color: #0000ff;">import<span style="color: #000000;"> java.io.FileReader;
<span style="color: #0000ff;">import<span style="color: #000000;"> java.io.FileWriter;
<span style="color: #0000ff;">import<span style="color: #000000;"> java.io.IOException;
<span style="color: #0000ff;">import<span style="color: #000000;"> java.io.InputStream;
<span style="color: #0000ff;">import<span style="color: #000000;"> java.io.InputStreamReader;
<span style="color: #0000ff;">import<span style="color: #000000;"> java.io.OutputStreamWriter;
<span style="color: #0000ff;">import<span style="color: #000000;"> java.io.PrintWriter;

<span style="color: #0000ff;">public <span style="color: #0000ff;">class<span style="color: #000000;"> TestCharSteam {

</span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;static</span> <span style="color: #0000ff;"&gt;void</span> testInputStreamReader() <span style="color: #0000ff;"&gt;throws</span><span style="color: #000000;"&gt; IOException {
    InputStream in </span>= <span style="color: #0000ff;"&gt;new</span> FileInputStream("demo/test.txt"<span style="color: #000000;"&gt;);
    InputStreamReader isr </span>= <span style="color: #0000ff;"&gt;new</span> InputStreamReader(in,"utf-8");<span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt; 默认项目编码</span>

<span style="color: #000000;">
FileOutputStream out = <span style="color: #0000ff;">new FileOutputStream("demo/test1.txt"<span style="color: #000000;">);
OutputStreamWriter osw = <span style="color: #0000ff;">new<span style="color: #000000;"> OutputStreamWriter(out);

    </span><span style="color: #0000ff;"&gt;int</span><span style="color: #000000;"&gt; c;
    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt; 每次读取一个字符
    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt; c = isr.read()</span>
    <span style="color: #0000ff;"&gt;char</span>[] buffer = <span style="color: #0000ff;"&gt;new</span> <span style="color: #0000ff;"&gt;char</span>[20<span style="color: #000000;"&gt;];
    </span><span style="color: #0000ff;"&gt;int</span> count = 0<span style="color: #000000;"&gt;;
    </span><span style="color: #0000ff;"&gt;int</span> a = 0<span style="color: #000000;"&gt;;
    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt; 每次读取buffer.length个字符</span>
    <span style="color: #0000ff;"&gt;while</span> ((c = isr.read(buffer)) != -1<span style="color: #000000;"&gt;) {
        String s </span>= <span style="color: #0000ff;"&gt;new</span> String(buffer,0<span style="color: #000000;"&gt;,c);
        System.out.print(s);
        osw.write(buffer,</span>0<span style="color: #000000;"&gt;,c);
    }
    osw.close();
}

</span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;static</span> <span style="color: #0000ff;"&gt;void</span> testBuffered() <span style="color: #0000ff;"&gt;throws</span><span style="color: #000000;"&gt; IOException {
    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt; 构造参数 Reader</span>
    BufferedReader br = <span style="color: #0000ff;"&gt;new</span><span style="color: #000000;"&gt; BufferedReader(
            </span><span style="color: #0000ff;"&gt;new</span><span style="color: #000000;"&gt; InputStreamReader(
                    </span><span style="color: #0000ff;"&gt;new</span> FileInputStream("demo/test.txt"),"utf-8"<span style="color: #000000;"&gt;));

<span style="color: #008000;">//<span style="color: #008000;"> BufferedWriter bw = new BufferedWriter(
<span style="color: #008000;">//<span style="color: #008000;"> new OutputStreamWriter(
<span style="color: #008000;">//<span style="color: #008000;"> new FileOutputStream("demo/test1.txt")));
PrintWriter pw = <span style="color: #0000ff;">new PrintWriter("demo/test1.txt"<span style="color: #000000;">);
String line;
<span style="color: #0000ff;">while ((line = br.readLine()) != <span style="color: #0000ff;">null<span style="color: #000000;">) {
<span style="color: #008000;">//<span style="color: #008000;"> 读取一行不会读取换行!
<span style="color: #000000;"> System.out.println(line);
pw.println(line);
pw.flush();
<span style="color: #008000;">//<span style="color: #008000;"> bw.write(line);
<span style="color: #008000;">//<span style="color: #008000;"> bw.newLine();
<span style="color: #000000;"> }
br.close();
<span style="color: #008000;">//<span style="color: #008000;">bw.close();
<span style="color: #000000;"> pw.close();
}

</span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;static</span> <span style="color: #0000ff;"&gt;void</span> testFileWriterAndReader() <span style="color: #0000ff;"&gt;throws</span><span style="color: #000000;"&gt; IOException {
    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt; 不能设置编码 所以比编码不同的时候还是需要InputStreamReader&amp;OutputStreamWriter</span>
    FileReader fr = <span style="color: #0000ff;"&gt;new</span> FileReader("demo/test.txt"<span style="color: #000000;"&gt;);
    FileWriter fw </span>= <span style="color: #0000ff;"&gt;new</span> FileWriter("demo/test1.txt"<span style="color: #000000;"&gt;);
    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt; FileWriter(fileName,true); true 表追加append</span>
    <span style="color: #0000ff;"&gt;char</span>[] buffer = <span style="color: #0000ff;"&gt;new</span> <span style="color: #0000ff;"&gt;char</span>[2056<span style="color: #000000;"&gt;];
    </span><span style="color: #0000ff;"&gt;int</span><span style="color: #000000;"&gt; c;
    </span><span style="color: #0000ff;"&gt;while</span> ((c = fr.read(buffer)) != -1<span style="color: #000000;"&gt;) {
        fw.write(buffer);
    }
    fr.close();
    fw.close();
}

</span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;static</span> <span style="color: #0000ff;"&gt;void</span> main(String[] args) <span style="color: #0000ff;"&gt;throws</span><span style="color: #000000;"&gt; IOException {
    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt; testInputStreamReader();
    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt; testFileWriterAndReader();</span>

<span style="color: #000000;"> testBuffered();
}

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读