IO流(三)其他流与File类
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类的更多相关文章
- IO流——File类(文件流类)
java语言的输入输出操作是借助于输入输出包java.io来实现的,按传输方向分为输入流与输出流,从外设传递到应用程序的流为输入流,将数据从应用程序输入到外设的流为输出流. File类的构造方法: 1 ...
- 09、IO流—File类与IO流
目录 一.File类 基本认识 实用方法 获取功能 重命名功能(包含剪切) 判断功能 创建.删除文件 实际小案例 二.IO流 1.认识IO流 2.IO流基类介绍 字节流基类介绍 字符流基类介绍 三.节 ...
- 关于Java的File类、字节流和字符流
一.File类: 在Windows下的路径分隔符(\)和在Linux下的路径分隔符(/)是不一样的,当直接使用绝对路径时,跨平台会报No Such file or diretory异常. File中还 ...
- Properties-转换流-打印流-序列化和反序列化-Commons-IO工具类
一.Properties 类(java.util) 概述:Properties 是一个双列集合;Properties 属于map的特殊的孙子类;Properties 类没有泛型,propert ...
- java.io.File类
java.io.File类 1.凡是与输入.输出相关的类.接口等都定义在java.io包下 2.File是一个类.能够有构造器创建其对象.此对象相应着一个文件(.txt .avi .doc .ppt ...
- Java面向对象 IO (三)
Java面向对象 IO (三) 知识概要: (1)IO 流的操作规律 (2)异常日志信息IO处理 ...
- C#文件操作基础之File类和FileInfo类
文件和I/O流的差异: 文件是一些具有永久存储及特定顺序的字节组成的一个有序的.具有名称的集合. 因此对于文件,我们经常想到文件夹路径,磁盘存储,文件和文件夹名等方面. I/O流提供一种后备存储写入字 ...
- File 类 操作实例
File 操作 <介绍> 尽管java.io定义的大多数类是实行流式操作的,File类不是.它直接处理文件和文件系统.也就是说,File类没有指定信息怎样从文件读取或向文件存储:它描述了文 ...
- 【Java】File类
File类 File类的一个对象,代表一个文件或一个文件目录(俗称:文件夹) File类声明在java.io包下 File类中涉及到关于文件或文件目录的创建.删除.重命名.修改时间.文件大小等方法,并 ...
- JAVA实现File类中的遍历操作并输出内容
package shb.java.testIo; import java.io.BufferedReader; import java.io.BufferedWriter; import java.i ...
随机推荐
- 20169221 2016-2017-2《移动平台与android开发》学习总结
每周作业连接汇总 第一周<Intellj IDEA 简易教程>学习,码云的基础使用.由于第一次写作业,网络攻防作业占据了我整个周四周五周六的时间这周java时间被挤没了,所以没有完成所有学 ...
- Groovy 读取json文件,并用gson反序列化为List集合
Groovy 读取json文件,并用gson反序列化 package com.bicycle.util import bicycle_grails.StationInfo import com.goo ...
- openGL中的原理理解1---一个视图需要支持OGL需要配置,GLenbalView的理解
OpenGL的绘图机制是 OpenGL的绘图方式与Windows一般的绘图方式是不同的,主要区别如下: (1)Windows采用的是GDI(Graphy Device Interface 图形设备接口 ...
- 6、Docker Image
6.1 什么是image 文件和meta data的集合(root filesystem) 分层的,并且每一层都可以添加.改变.删除文件,成为一个新的image 不同的image可以共享相同的laye ...
- EBS11i - 常用Profile
Profile Name 说明 设置建议 FND: Enable Cancel Query 当执行一个超长时间的查询时,会出现一个 Cancel窗口,允许用户取消.比如我们在SO 界面没有输入条件 ...
- 作业一:博客和Github简单练习
(1)自我介绍 Hello everybody! 我叫纪杨阳,学号1413042002,网络工程141班. 本人没啥特殊的兴趣爱好,都是些平常得不能再平常的吃吃睡睡.要说感兴趣的,可能就是音乐和服饰还 ...
- SQL LEAD()函数 LAG()函数
lag ,lead 分别是向前,向后:lag 和lead 有三个参数,第一个参数是列名,第二个参数是偏移的offset,第三个参数是 超出记录窗口时的默认值) SQL> select id,na ...
- [Cocos2d-x for WP8学习笔记] 获取系统字体
在Cocos2d-x for WP8较新的版本中,获取字体这一块,在wp8下默认返回了null,只能内嵌字体文件解决. 其实可以通过下面的方法获取系统的字体文件 CCFreeTypeFont::loa ...
- Neutron FWaaS 原理
理解概念 Firewall as a Service(FWaaS)是 Neutron 的一个高级服务.用户可以用它来创建和管理防火墙,在 subnet 的边界上对 layer 3 和 layer 4 ...
- Python脱产8期 Day15 2019/4/30
一 生成器send方法 1.send的工作原理# 1.send发生信息给当前停止的yield# 2.再去调用__next__()方法,生成器接着往下指向,返回下一个yield值并停止 2.例: per ...