1:其他的流

1: DataOutputStream ;多了一些操作基本数据类型的功能

DataInputStream:读取文件。

用DataOutputStream流写进去的数据,就用DataInputStream流来读取。

 import java.io.DataInputStream;

 import java.io.DataOutputStream;

 import java.io.FileInputStream;

 import java.io.FileOutputStream;

 import java.io.IOException;

 public class DateIODemo1 {

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

                    FileOutputStream fos = new FileOutputStream("e:\\cc.txt");

                    /*

                     * 数据输出流是一种处理流,所以应该传入一个节点流作为参数

                     * 数据输出流写到文本上的内容是不是按照程序中的原样写进文件中的

                     */

                    DataOutputStream dos = new DataOutputStream(fos);

                    dos.writeInt(123);//4字节

                    dos.writeBoolean(false);//1字节

                    dos.writeDouble(12.34);//8字节

                    //数据输出流是一种处理流,所以应该传入一个节点流作为参数

                    FileInputStream fis = new FileInputStream("e:\\cc.txt");

                    DataInputStream dis = new DataInputStream(fis);

                    //按顺序读取才能读到正确的数据

                    System.out.println(dis.readInt());

                    System.out.println(dis.readBoolean());

                    System.out.println(dis.readDouble());

                    dis.close();

                    dos.close();

          }

 }

  2:关于内存的流:不用制定硬盘中的某个文件路径,因为所有的数据都是写入到内存上的,所以这些数据不会被永久保存。

      2.1 ByteArrayOutputStream;内存写入流。如果不是字符,则可以调用toByteArray方法获得内存中的数据。

 import java.io.ByteArrayOutputStream;

 import java.io.IOException;

 public class ByteArrayOutputDemo1 {

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

                    ByteArrayOutputStream bos = new ByteArrayOutputStream();

                    bos.write("我写的这些东西真的放到了内存里面了".getBytes());

                    String str = bos.toString();

                    System.out.println(str);

          }

 }

2.2 ByteArrayInputStream:内存读取流。

 import java.io.ByteArrayInputStream;

 import java.io.IOException;

 public class ByteArrayInputStreamDemo1 {

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

                    byte[] b = "我真的真的在内存里面".getBytes();

                    ByteArrayInputStream bis = new ByteArrayInputStream(b);

                    byte[] b2 = new byte[1024];

                    int len = -1;

                    while((len = bis.read(b2)) != -1){

                             System.out.println(new String(b2, 0, len));

                    }       

          }

 }

3:打印流: PrintStream 打印的所有字符都使用平台的默认字符编码转换为字节。在需要写入字符而不是写入字节的情况下,应该使用 PrintWriter 类。

PrintStream

PrintWriter

 import java.io.BufferedReader;

 import java.io.InputStream;

 import java.io.InputStreamReader;

 import java.io.PrintStream;

 //接收键盘录入,写到文件中。

 public class PrintStreamDemo2 {

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

                    InputStream is = System.in;

                    BufferedReader br = new BufferedReader(new InputStreamReader(is));

                    //打印流。

                    PrintStream ps = new PrintStream("f:\\aaa.txt");

                    String str = null;

                    while(true){

                             str = br.readLine();

                             if("886".equals(str)){

                                      break;

                             }

                             ps.println(str);//将数据和换行写到目的地中。

                    }

                    br.close();

          }

 }

4:RandomAccessFile:随机流。这个流并不是像平时说的那样“随机”,只是程序员可以使用这个类类读取文件中指定位置的数据,或者在文件中指定是位置写入数据。关键的方法就是seek();

 import java.io.FileNotFoundException;

 import java.io.IOException;

 import java.io.RandomAccessFile;

 public class RandomAccessFiileDemo1 {

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

                    RandomAccessFile raf = new RandomAccessFile("e:\\cc.txt", "rw");

                    raf.writeBoolean(true);

                    raf.writeBytes("he");

 //               raf.writeFloat(123.99f);

                    raf.write(123);

                    raf.seek(0);//可以让指针指向文件的某个位置

                    System.out.println(raf.readBoolean());

                    System.out.println(raf.read());

                    System.out.println(raf.readInt());

                    //System.out.println(raf.readInt());

                    raf.close();

          }

 }

5:对象流.    Object   操作对象的流

这里会涉及到一个关键字transient(中文:短暂的,临时的),用来修饰成员变量。被static或者transient修饰的成员变量时改变量的值不会被对象流写出去的,也不会被读取到。对象流操作对象必须事项序列化接口Serializable,要不会出现java.io.InvalidClassException 无效的类型异常。

 import java.io.FileInputStream;

 import java.io.FileOutputStream;

 import java.io.IOException;

 import java.io.ObjectInputStream;

 import java.io.ObjectOutputStream;

 import com.java.domain.Student;

 public class WriterObjectDemo1 {

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

                    FileOutputStream fos = new FileOutputStream("e:\\stu.txt");

                    ObjectOutputStream oos = new ObjectOutputStream(fos);

                    oos.writeObject(new Student("zzz", 12));

                    oos.close();

                    // java.io.InvalidClassException 无效的类型异常

                    ObjectInputStream ois = new ObjectInputStream(new FileInputStream("e:\\stu.txt"));

                    System.out.println(ois.readObject());

                    ois.close();

          }

 }
import java.io.Serializable;

public class Student implements Serializable {

         //使用对象

         private static final long serialVersionUID = 1L;

         private String name;

         //private static int age;

         private transient int age;

//      private int age;

         public Student() {

                   super();

                   // TODO Auto-generated constructor stub

         }

         public Student(String name, int age) {

                   super();

                   this.name = name;

                   this.age = age;

         }

         @Override

         public String toString() {

                   return "Student [name=" + name + ", age=" + age + "]";

         }

         public void test(){

         }

}

Student类

     6:文件类.     File

6.1:File:表示文件或者目录。

6.2 常用的一些方法

          delete() 删除文件或目录。

          exists() 判断文件或目录是否存在。

          getAbsoluteFile()  返回路径名的绝对路径名形式。返回值-File

          getAbsolutePath()  返回路径名的绝对路径名字符串。返回值-String

          getName() 返回由路径名表示的文件或目录的名称。

          boolean isDirectory()  路径名表示的文件是否是一个目录。

          boolean isFile()  路径名表示的文件是否是一个标准文件。

          length()  返回路径名表示的文件的长度。

String[]

list()返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。

String[]

list(FilenameFilter filter)返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中满足指定过滤器的文件和目录。

File[]

listFiles()返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。

File[]

listFiles(FileFilter filter)返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。

File[]

listFiles(FilenameFilter filter)返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。

          mkdir()  创建此抽象路径名指定的目录(只能创建一层)。

          mkdirs() 创建此抽象路径名指定的目录(可创建多层)。

经典示例:

// 遍历所有文件

   public static void getFiles(String path) {

                    File file = new File(path);

                    if (!file.exists()) {

                             System.out.println("没有找到该路径或者文件");

                             return;

                    }

                    if (file.isFile()) {

                             System.out.println(file.getAbsolutePath());

                    } else {

                             System.out.println(file.getAbsolutePath());

                             File[] files = file.listFiles();

                             // 遍历文件

                             for (File file2 : files) {// 递归遍历

                                      // 如果是目录在重新调用自己

                                      getFiles(file2.getAbsolutePath());

                             }

                    }

          }

// 删除所有文件

   public static void deleteFile2(String path) {

                    File file = new File(path);

                    if (!file.exists()) {

                             return;

                    }

                    if (file.isFile()) {

                             file.delete();

                    } else {

                             File[] files = file.listFiles();

                             for (File file2 : files) {

                                      deleteFile2(file2.getAbsolutePath());

                             }

                             file.delete();

                    }

          }

IO流(三)其他流与File类的更多相关文章

  1. IO流——File类(文件流类)

    java语言的输入输出操作是借助于输入输出包java.io来实现的,按传输方向分为输入流与输出流,从外设传递到应用程序的流为输入流,将数据从应用程序输入到外设的流为输出流. File类的构造方法: 1 ...

  2. 09、IO流—File类与IO流

    目录 一.File类 基本认识 实用方法 获取功能 重命名功能(包含剪切) 判断功能 创建.删除文件 实际小案例 二.IO流 1.认识IO流 2.IO流基类介绍 字节流基类介绍 字符流基类介绍 三.节 ...

  3. 关于Java的File类、字节流和字符流

    一.File类: 在Windows下的路径分隔符(\)和在Linux下的路径分隔符(/)是不一样的,当直接使用绝对路径时,跨平台会报No Such file or diretory异常. File中还 ...

  4. Properties-转换流-打印流-序列化和反序列化-Commons-IO工具类

    一.Properties 类(java.util)     概述:Properties 是一个双列集合;Properties 属于map的特殊的孙子类;Properties 类没有泛型,propert ...

  5. java.io.File类

    java.io.File类 1.凡是与输入.输出相关的类.接口等都定义在java.io包下 2.File是一个类.能够有构造器创建其对象.此对象相应着一个文件(.txt .avi .doc .ppt ...

  6. Java面向对象 IO (三)

     Java面向对象  IO  (三) 知识概要:                    (1)IO 流的操作规律                    (2)异常日志信息IO处理          ...

  7. C#文件操作基础之File类和FileInfo类

    文件和I/O流的差异: 文件是一些具有永久存储及特定顺序的字节组成的一个有序的.具有名称的集合. 因此对于文件,我们经常想到文件夹路径,磁盘存储,文件和文件夹名等方面. I/O流提供一种后备存储写入字 ...

  8. File 类 操作实例

    File 操作 <介绍> 尽管java.io定义的大多数类是实行流式操作的,File类不是.它直接处理文件和文件系统.也就是说,File类没有指定信息怎样从文件读取或向文件存储:它描述了文 ...

  9. 【Java】File类

    File类 File类的一个对象,代表一个文件或一个文件目录(俗称:文件夹) File类声明在java.io包下 File类中涉及到关于文件或文件目录的创建.删除.重命名.修改时间.文件大小等方法,并 ...

  10. JAVA实现File类中的遍历操作并输出内容

    package shb.java.testIo; import java.io.BufferedReader; import java.io.BufferedWriter; import java.i ...

随机推荐

  1. Android通过xml生成创建View的过程解析

    Android的布局方式有两种,一种是通过xml布局,一种是通过java代码布局,两种布局方式各有各的好处,当然也可以相互混合使用.很多人都习惯用xml布局,那xml布局是如何转换成view的呢?本文 ...

  2. 用 pyqt4 编写的一个翻译小工具

    有时候我们在开发时遇到一些陌生的英文单词或者不容易看出某些长句的中文意思时该怎么办呢?打开桌面上的翻译软件?打开浏览器里收藏着的翻译网址或者直接贴上百度的搜索框去查?这些方法固然可以,还很常见,但如果 ...

  3. weevely入手使用笔记

    -前言 weevely是一款使用python编写的webshell工具,集webshell生成和连接于一身,采用c/s模式构建,可以算作是linux下的一款php菜刀替代工具,具有很好的隐蔽性(生成随 ...

  4. HTML5 Canvas之猜数字游戏

    主要的内容描述的是如何渲染一个矩形的边框和填充背景,以及文字. 代码中有详细的注释: 效果图: 以下是代码: <!DOCTYPE html> <html lang="cn& ...

  5. delphi中,write和read的用法?什么时候需要用?

    如你所说,在控件或者类的属性中,read 表示 读取,write 则表示设置.比如在类中:TTestClass = (Class)privateFOrderCode:String;publicprop ...

  6. DMV--sys.dm_os_ring_buffers

    DMV 'sys.dm_os_ring_buffers' 可以用来诊断数据库连接和数据库内存方面的问题,但MSDN上找不到相应的介绍,网上找到以下相关资料: 1>sys.dm_os_ring_b ...

  7. cesium编程中级开篇

    cesium编程中级开篇 其实初级,中级并无定论,我理解的初级是根据官方教程,先学会如何部署环境,搭建hello world,使用官方提供的工具,完成一些示例, 而中级就是在这些的基础上,自己定制一些 ...

  8. ISE14.7生成.bit文件和mcs文件

    1.FPGA bit文件加载步骤(加载到FPGA的RAM中,用于在线调试,掉电丢失) 第一步:选择Tools->IMPCAT->选择OK: 第二步:双击Boundary Scan-> ...

  9. “全栈2019”Java多线程第十五章:当后台线程遇到finally

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

  10. 洛谷P4069 [SDOI2016]游戏(李超线段树)

    题面 传送门 题解 如果我们把路径拆成两段,那么这个路径加可以看成是一个一次函数 具体来说,设\(dis_u\)表示节点\(u\)到根节点的距离,那么\((x,lca)\)这条路径上每个节点的权值就会 ...