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 ...
随机推荐
- http://blog.csdn.net/hongchangfirst/article/details/26004335
悲观锁(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁.传统的 关系型数 ...
- Groovy 读取json文件,并用gson反序列化为List集合
Groovy 读取json文件,并用gson反序列化 package com.bicycle.util import bicycle_grails.StationInfo import com.goo ...
- spring获取webapplicationcontext,applicationcontext几种方法详解(转载)
转载自 http://www.blogjava.net/Todd/archive/2010/04/22/295112.html 方法一:在初始化时保存ApplicationContext对象 代码: ...
- 基数排序简单Java实现
基数排序(radix sort)又称“桶子法”,在对多个正整数进行排序时可以使用.它的灵感来自于队列(Queue),它最独特的地方在于利用了数字的有穷性(阿拉伯数字只有0到9的10个). 基数排序使用 ...
- iOS9 Https技术预研
一.服务器需要做的事情: 1.要注意 App Transport Security 要求 TLS 1.2, 2.而且它要求站点使用支持forward secrecy协议的密码. 3.证书也要求是符合A ...
- CAS实战の获取多用户信息
先列出版本号: 服务端版本:cas server 4.0.0 客户端版本:cas client 3.3.3 cas server step1:先将primaryPrincipalResolver be ...
- Objective-C 学习笔记(三) Numbers/数字
Objective-C Numbers/数字 Objective-C中提供了一系列的NSNumber和重要的工作方法: + (NSNumber *)numberWithBool:(BOOL)value ...
- Linux Context , Interrupts 和 Context Switching 说明
一. 进程Context 定义 当一个进程在执行时, CPU的所有寄存器中的值.进程的状态以及堆栈中的内容,比如各个变量和数据,包括所有的寄存器变量.进程打开的文件.内存信息等.这些信息被称为该进程的 ...
- ISO in CSS content
Name Numeric Description Hex ISO in CSS content Octal no-break space %A0 p:before { content: ...
- visual studio code中使用emmet插件在.vue文件失效
使用visual studio code编辑.vue文件时,emmet插件无法使用,可以通过以下两种试解决: 1.文件→设置,在右侧窗口添加以下代码: "emmet.syntaxProfil ...