Java基础——I/O续
二进制I/O类
FileInputStream类和FileOutputStream类
*FileOutputStream(file: File)
*FileOutputStream(filename: String)
*FileOutputStream(file: File, append: boolean)
*FileOutputStream(filename: String, append: boolean)
如果文件不存在,则会创建一个新文件。
如果这个文件已经存在,前两个构造方法将会删除文件的当前内容。
若要在已存在的文件上进行修改,则将最后两个构造方法中的参数append设置为true
public class TestFileStream {
public static void main(String[] args) throws java.io.IOException{
java.io.OutputStream output = new java.io.FileOutputStream("temp.dat");
for(int i = 97; i <= 122; i++)
output.write(i);
output.close();
java.io.InputStream input = new java.io.FileInputStream("temp.dat");
int value;
//从input.read()中读取一个字节,然后将它赋值给value,并且检验它是否为-1。输入值为-1意味着文件的结束。
while((value = input.read()) != -1)
System.out.println(value);
//不关闭流可能会在输出文件中造成数据受损,或导致其他的程序设计错误。
input.close();
}
}
TestFileStream.java
DataInputStream类和DataOutputStream类
DataInputStream从数据流读取字节,并且将它们转换为正确的基本类型值或字符串值。
DataOutputStream将基本类型的值或字符串转换为字节,并且将字节输出到数据流。
import java.io.RandomAccessFile;
public class TestDataStream {
public static void main(String[] args) throws java.io.FileNotFoundException,java.io.IOException{
java.io.DataOutputStream dos = new java.io.DataOutputStream(new java.io.FileOutputStream("temp.dat"));
dos.writeUTF("BinZheng");
dos.writeDouble(95.5);
dos.close();
java.io.DataInputStream dis = new java.io.DataInputStream(new java.io.FileInputStream("temp.dat"));
System.out.println("姓名:"+dis.readUTF()+"-"+"分数:"+dis.readDouble());
dis.close();
RandomAccessFile raf = new RandomAccessFile("1234.txt", "rw");
raf.write(51);
raf.close();
}
}
TestDataStream.java
BufferedInputStream类和BufferedOutputStream类
可以通过减少读写次数来提高输入和输出的速度。
其为存储字节在流中添加一个缓冲区,以提高处理效率。
如果没有指定缓冲区大小,默认的大小是521个字节。缓冲区输入流会在每次读取调用中尽可能多地将数据读入缓冲区。相反地,只有当缓冲区已满或调用flsh()方法时,缓冲输出流才会调用写入方法。
对象的输入/输出
ObjectInputStream类和ObjectOutputStream类除了可以实现基本数据类型与字符串的输入和输出之外,还可以实现对象的输入和输出。所以完全可以用ObjectInputStream类和ObjectOutputStream类代替DataInputStream类和DataInputStream类。
public class TestObjectOutputStream {
public static void main(String[] args) throws java.io.IOException,ClassNotFoundException{
java.io.ObjectOutputStream output = new java.io.ObjectOutputStream(new java.io.FileOutputStream("object.dat"));
//若要提高程序的性能,可以使用下面的语句代替上一行
//java.io.ObjectOutputStream output1 = new java.io.ObjectOutputStream(new java.io.BufferedOutputStream(new java.io.FileOutputStream("object.dat")));
output.writeUTF("BinZheng");
output.writeDouble(95.5);
output.writeObject(new java.util.Date());
output.close();
java.io.ObjectInputStream input = new java.io.ObjectInputStream(new java.io.FileInputStream("object.dat"));
System.out.println(input.readUTF()+" - "+
input.readDouble()+" - "+
input.readObject());
input.close();
}
}
TestObjectOutputStream.java
序列化数组
只有数组中的元素都是可序列化的,这个数组才是可序列化的。
public class TestObjectStreamForArray {
public static void main(String[] args) throws java.io.FileNotFoundException, java.io.IOException, ClassNotFoundException {
int[] numbers = {1,2,3,4,5};
String[] strings = {"zhengbin","zhengjia","cuimin"};
//若不存在这个文件,则会创建一个新文件。
java.io.ObjectOutputStream oos = new java.io.ObjectOutputStream(new java.io.FileOutputStream("array.dat",true));
oos.writeObject(numbers);
oos.writeObject(strings);
oos.close();
java.io.ObjectInputStream ois = new java.io.ObjectInputStream(new java.io.FileInputStream("array.dat"));
int[] numbers1 = (int[])(ois.readObject());
String[] strings1 = (String[])(ois.readObject());
ois.close();
for(int i = 0;i < numbers1.length;i++){
System.out.print(numbers1[i]);
}
System.out.println();
for(int i = 0;i < strings1.length;i++){
System.out.print(strings1[i]);
}
}
}
TestObjectStreamForArray.java
随机访问文件
之前所用的所有数据流都是只读的或只写的。这些数据流的外部文件都是顺序文件,如果不创建新文件就不能更新它们。
RandomAccessFile类实现了DataInput和DataOutput接口。
当创建一个RandomAccessFile数据流时,可以指定两种模式(“r”或“rw”)之一。
模式“r”表明这个数据流是只读的,模式“rw”表明这个数据流即允许读也允许写。
唉,没啥意思,暂时不深究了
文件导航和I/O
创建目录:
import java.io.File;
public class CreateDir {
public static void main(String args[]) {
String dirname = "/tmp/user/java/bin";
File d = new File(dirname);
// Create directory now.
d.mkdirs();
}
}
目录列表:
import java.io.File;
public class ReadDir {
public static void main(String[] args) { File file = null;
String[] paths; try{
// create new file object
file = new File("/tmp"); // array of files and directory
paths = file.list(); // for each name in the path array
for(String path:paths)
{
// prints filename and directory name
System.out.println(path);
}
}catch(Exception e){
// if any error occurs
e.printStackTrace();
}
}
}
相关博客:
http://www.cnblogs.com/zhengbin/p/5184271.html
Java基础——I/O续的更多相关文章
- 【概念笔记】JAVA基础 - part2
IT`huhiu前言录 这是续JAVA基础 - part1 链接http://www.cnblogs.com/ithuhui/p/5922067.html的. 笔记慢慢在修改和补充 JAVA里面重要的 ...
- Java基础知识总结(超级经典)
Java基础知识总结(超级经典) 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java ...
- 毕向东—Java基础知识总结(超级经典)
Java基础知识总结(超级经典) 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java ...
- Java基础IO流(一)
IO概念: 大多数应用程序都需要实现与设备之间的数据传输,例如键盘可以输入数据,显示器可以显示程序的运行结果等.在Java中,将这种通过不同输入输出设备(键盘,内存,显示器,网络等)之间的数据传输抽象 ...
- 黑马毕向东Java基础知识总结
Java基础知识总结(超级经典) 转自:百度文库 黑马毕向东JAVA基础总结笔记 侵删! 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部 ...
- 尚学堂JAVA基础学习笔记
目录 尚学堂JAVA基础学习笔记 写在前面 第1章 JAVA入门 第2章 数据类型和运算符 第3章 控制语句 第4章 Java面向对象基础 1. 面向对象基础 2. 面向对象的内存分析 3. 构造方法 ...
- Java基础系列8——IO流超详细总结
该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架. 在初学Java时,I ...
- Java 基础(四)| IO 流之使用文件流的正确姿势
为跳槽面试做准备,今天开始进入 Java 基础的复习.希望基础不好的同学看完这篇文章,能掌握泛型,而基础好的同学权当复习,希望看完这篇文章能够起一点你的青涩记忆. 一.什么是 IO 流? 想象一个场景 ...
- 毕向东java基础总结
Java基础知识总结(超级经典) 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java ...
随机推荐
- 引擎设计跟踪(九.10) Max插件更新,地形问题备忘
最近没有大的更新. 最近本来要做max的骨骼/动画导出, 看导出插件代码的时候, 突然想起之前tagent space导出的疑问, 于是确认了一下. http://www.cnblogs.com/cr ...
- Http、tcp、Socket连接区别
转自Http.tcp.Socket连接区别 相信不少初学手机联网开发的朋友都想知道Http与Socket连接究竟有什么区别,希望通过自己的浅显理解能对初学者有所帮助. 1.TCP连接 要想明白Sock ...
- 【设计模式六大原则1】单一职责原则(Single Responsibility Principle)
http://blog.csdn.net/zhengzhb/article/category/926691/1 图片素材来源,java学习手册 ps.内容为自己整理 定义:不要存在多于一个 ...
- 关联式容器(associative containers)
关联式容器(associative containers) 根据数据在容器中的排列特性,容器可分为序列式(sequence)和关联式(associative)两种. 标准的STL关联式容器分为set( ...
- TCP 流模式与UDP数据报模式(转)
TCP流模式与UDP数据报模式http://blog.csdn.net/s3olo/article/details/7914717 数据报(datagram)通常是指起始点和目的地都使用无连接网络服务 ...
- spring webservice 开发demo (实现基本的CRUD 数据库采用H2)
在实现过程中,遇到两个问题: 1: schema 写错: 错误: http://myschool.com/schemas/st 正确: http://myschool.com/st/schemas ...
- asp.net 权限问题
asp.net项目中通过Web.config配置文件及文件夹的访问权限! http://blog.csdn.net/qingyun1029/article/details/6184723
- 如何在Android应用程序中使用传感器模拟器SensorSimulator
原文地址; 如何在Android应用程序中使用传感器模拟器 - 移动平台应用软件开发技术 - 博客频道 - CSDN.NET http://blog.csdn.net/pku_android/arti ...
- IP地址字符串与BigInteger的转换
/** * Copyright (c) 2010, 新浪网支付中心 * All rights reserved. * * Java IP地址字符串与BigInteger的转换, * ...
- *CentOS下简单的MySQL数据库操作
1.登录成功之后退出的话,直接输入quit或者exit即可.