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 ...
随机推荐
- 设置手机iphone5s邮件
由于更新系统后,手机自带的邮件服务器老是报错,后来查一下,需要设置qq邮箱独立密码,http://jingyan.baidu.com/article/c146541354cefb0bfdfc4c5d. ...
- Android-自定义联系人快速索引
效果图: 布局去指定 view.custom.shangguigucustomview.MyCustomIndexView 自定义View对象 <!-- 自定义联系人快速索引 --> &l ...
- kubernetes yaml
apiVersion: v1 #指定api版本,此值必须在kubectl apiversion中 kind: Deployment #指定创建资源的角色/类型 metadata: #资源的元数据/属性 ...
- css选择器与DOM'匹配的关系
一道面试题 css 选择器匹配时,只考察是否包含有对应的class,而与class的顺序无关 而css的定义是后面的覆盖前面的定义 原理:http://www.w3.org/html/ig/zh/wi ...
- WIN7或2008远程连接特别慢的解决方法 【转】
方法一. 原因在于从vista开始,微软在TCP/IP协议栈里新加了一个叫做“Window Auto-Tuning”的功能.这个功能本身的目的是为了让操作系统根据网络的实时性能,(比如响应时间)来动态 ...
- JQuery中DOM操作(一)
节点操作 1.插入节点,在JQuery中插入的节点方法很多,可以满足各种不同的节点插入的情况,根据不同的插入方式分为:增加环绕节点.节点内部插入和外部插入三种方式 今天我们要讲的是增加环绕节点,它有三 ...
- WP8.1StoreApp(WP8.1RT)---本地Toast
WP7/8中的Toast是不能在前台弹出的. WP8.1StoreApp可以利用Win8中的方式: private void Toast(string title,string content) { ...
- Ceph 的基础数据结构 [Pool, Image, Snapshot, Clone]
原文链接:http://www.cnblogs.com/sammyliu/p/4843812.html?utm_source=tuicool&utm_medium=referral 1 Poo ...
- BEAUTIFUL
DESCRIPTION:一个长度为n 的序列,对于每个位置i 的数ai 都有一个优美值,其定义是:找到序列中最长的一段[l, r],满足l<i<r,且[l, r] 中位数为ai(我们比较序 ...
- ISE14.7生成.bit文件和mcs文件
1.FPGA bit文件加载步骤(加载到FPGA的RAM中,用于在线调试,掉电丢失) 第一步:选择Tools->IMPCAT->选择OK: 第二步:双击Boundary Scan-> ...