RandomAccessFile

构造方法

//var1 文件路径,var 文件的读写模式 "r"只读,"w"只写,"rw"读写

public RandomAccessFile(String var1, String var2) throws FileNotFoundException {

this(var1 != null?new File(var1):null, var2);

}

//传文件,和模式

public RandomAccessFile(File var1, String var2) throws FileNotFoundException {

}

其他常用方法

public void close () 关闭操作

public int read ( byte[] b)将内容读取到一个byte数组之中

public final byte readByte () 读取一个字节

public final int readInt () 从文件中读取整型数据。

public void seek ( long pos)设置读指针的位置。

public final void writeBytes (String s)将一个字符串写入到文件之中,按字节的方式处理。

public final void writeInt ( int v)将一个int型数据写入文件,长度为4位。

public int skipBytes ( int n)指针跳过多少个字节。

RandomAccessFile 读写案例

文件路径

//文件路径

public static final String PATH = "/Volumes/huang/studyfromGitHub/JavaForAndroid/JavaForAndroid/series11/src/main/java/files/testRAF.txt";

/**

*

*/

private static void testWrite() {

RandomAccessFile accessFile = null;

try {

//读写模式创建实例

accessFile = new RandomAccessFile(PATH, "rw");

//读取文件长度

System.out.println(accessFile.length() + " B");//0B

//将文件指针移动中间位置

accessFile.seek(accessFile.length() / 2);

String name = null;

int age = 0;// int 的长度为4

float money = 1.2f;// float 的长度为4

//double长度为8

name = "name1";// 长度为5de字符串

age = 20;

money = 23.5f;

accessFile.writeBytes(name);

//读取文件长度

System.out.println(accessFile.length() + "B");//5B

accessFile.writeInt(age);

System.out.println(accessFile.length() + "B");//9B

accessFile.writeFloat(money);

System.out.println(accessFile.length() + "B");//13B

System.out.println("================================");

name = "name2";// 长度为5de字符串

age = 21;

money = 24.5f;

accessFile.writeBytes(name);

System.out.println(accessFile.length() + "B");//18B

accessFile.writeInt(age);

System.out.println(accessFile.length() + "B");//22B

accessFile.writeFloat(money);

System.out.println(accessFile.length() + "B");//26B

//accessFile.writeUTF("hello,你好!");

//注:从中间写入的数据是覆盖后面的内容,因此在写数据时,尽量追加在内容之后

} catch (Exception e) {

e.printStackTrace();

} finally {

try {

accessFile.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

/**

* 读

*/

private static void testRead() {

RandomAccessFile accessFile = null;

//读写模式创建实例

try {

accessFile = new RandomAccessFile(PATH, "r");//只读模式创建实例

String name = null;

int age = 0;

float money = 0.0f;

byte[] bytes = new byte[5];

//假如要先读第二个人的信息

accessFile.skipBytes(13);//则跳过前13字节

for (int i = 0; i < bytes.length; i++) {

bytes[i] = accessFile.readByte();//读取一个字节

}

name = new String(bytes);

age = accessFile.readInt();

money = accessFile.readFloat();

System.out.println("name2:-->" + name + "\t" + age + "\t" + money);

//读第一个

accessFile.seek(0);//指针回到0

//假如要先读第二个人的信息

for (int i = 0; i < bytes.length; i++) {

bytes[i] = accessFile.readByte();//读取一个字节

}

name = new String(bytes);

age = accessFile.readInt();

money = accessFile.readFloat();

System.out.println("name1:-->" + name + "\t" + age + "\t" + money);

} catch (Exception e) {

e.printStackTrace();

}finally {

try {

accessFile.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

读的运行结果

DataOutputStream(数据输出流)、DataInputStream(数据输入流)

DataOutputStream

构造方法

//传入一个字节输出流

public DataOutputStream(OutputStream var1) {

super(var1);

}

用法案例

文件路径

public static final String PATH = "/Volumes/huang/studyfromGitHub/JavaForAndroid/JavaForAndroid/series11/src/main/java/files/testOutput.txt";

/**

* DataOutputStream 写

*/

private static void write() {

DataOutputStream outputStream = null;

try {

//传入字节流实例获取对象实例

outputStream = new DataOutputStream(new FileOutputStream(PATH));

//写入基本数据

outputStream.writeUTF("你好,Java"); //写入utf-8编码字符串

outputStream.writeInt(10);

outputStream.writeInt(34);

outputStream.writeChar('a');

outputStream.writeBoolean(true);

} catch (Exception e) {

e.printStackTrace();

}finally {

try {

outputStream.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

/**

*

*/

private static void read() {

DataInputStream inputStream=null;

try {

inputStream=new DataInputStream(new FileInputStream(PATH));

//2. 读取数据

String txt=inputStream.readUTF();//读取utf-8编码的字符串

int a=inputStream.readInt();

int b=inputStream.readInt();

int num=inputStream.readChar();

boolean flag=inputStream.readBoolean();

System.out.println(txt+"\r\n"+a+" "+b+","+num+","+flag);

} catch (Exception e) {

e.printStackTrace();

}finally {

//关闭流

try {

inputStream.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

读结果

ByteArrayInputStream、ByteArrayOutputStream很常用的两个类

ByteArrayInputStream

构造方法

//使用一个字节数组当中所有的数据做为数据源

public ByteArrayInputStream(byte[] var1) {

.....

}

//从数组当中的第offset开始,一直取出length个这个字节做为数据源。

public ByteArrayInputStream(byte[] var1, int var2, int var3) {

....

}

ByteArrayOutputStream

构造方法

//创建一个32个字节的缓冲区

public ByteArrayOutputStream() {

this(32);

}

//根据参数指定大小创建缓冲区

public ByteArrayOutputStream(int var1) {

if(var1 < 0) {

throw new IllegalArgumentException("Negative initial size: " + var1);

} else {

this.buf = new byte[var1];

}

}

这两个构造函数创建的缓冲区大小在数据过多的时候都会自动增长。

案例运用

/**

* ByteArrayOutputStream拷贝本文件内容

*/

public class Demo9 {

//源文件路径

public static final String sourcePath = "/Volumes/huang/studyfromGitHub/JavaForAndroid/JavaForAndroid/series11/src/main/java/com/example/Demo9.java";

public static void main(String[] args) {

try {

//得到字节流

FileInputStream inputStream = new FileInputStream(sourcePath);

//将字节流转成字符流

InputStreamReader inputStreamReader = new InputStreamReader(inputStream);

//将字节流包装成一个缓冲字符流

BufferedReader bufferedReader = new BufferedReader(inputStreamReader);

//创建内存流对象--内存输出流

ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream(inputStream.available());

//将字节流转换成字符流

OutputStreamWriter outputStreamWriter = new OutputStreamWriter(arrayOutputStream);

//将字符流包装成缓冲字符流--BufferedWriter

BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter);

String msg = null;

while ((msg = bufferedReader.readLine()) != null) {

bufferedWriter.write(msg);//向内存中写入数据

bufferedWriter.newLine();

bufferedWriter.flush();//将缓冲区的数据写入到内存流中使用的内存区中

}

byte[] bytes = arrayOutputStream.toByteArray();

System.out.println(new String(bytes));

//关闭流

bufferedReader.close();

bufferedWriter.close();

} catch (Exception e) {

e.printStackTrace();

}

}

}

java 写流,Java IO中的其他读写流相关推荐

  1. Java写文件导致io过高_161108、Java IO流读写文件的几个注意点

    平时写IO相关代码机会挺少的,但却都知道使用BufferedXXXX来读写效率高,没想到里面还有这么多陷阱,这两天突然被其中一个陷阱折腾一下:读一个文件,然后写到另外一个文件,前后两个文件居然不一样? ...

  2. java makefile jar包_java makefile学习实践(编译的javac命令写在makefile中,运行命令java写在shell脚本中)...

    学习makefile教程,ubuntu中文网 1.写一个简单的java项目,不需要外部jar,用的简单的 importjava.util.ArrayList;是可以从CLASSPATH环境变量中找到的 ...

  3. java高级流低级流定义_java中哪些是低级流?哪些是高级流?

    引用来自"静心天涯"的评论 在输入输出里,有字节流和字符流分,这两者区别在于所操作的数据单元不同.还有另外一种认识,输入输出流可以分为节点刘和处理流(包装流),节点流有时候会被称为 ...

  4. java写wss,JAVA模拟WebSocket客户端,支持wss ssl证书

    背景:websocket在Html5里面有着举足轻重的地位,最近工做中须要对websocket接口进行压测,使用jmeter的websocket sample进行,可是通常现网的websocket都是 ...

  5. 【JavaIO流】JavaIO中的常用处理流

    JavaIO中的常用处理流 在前面,我们了解了有关JavaIO流基础的使用,其中对于IO流来说最基础的四大基类就是InputStream.OutputStream.Reader.Writer.而我们对 ...

  6. java socket 读取文件_java中ServerSocket读取文件流不是分行读取

    在学习socket的TCP通讯 在使用 TCP传一个文件时 遇到这样两个问题 1. 服务端流读取时一次性读了所有内容 而不是分行读取 2. 自动刷新不生效 代码如下 package com.fuge. ...

  7. 小技巧:用python迅速打印Java写 的Flink代码中的hive建表语句

    假设我们想要用Flink对hive进行读写, 并且其中一段代码如下: // 如果hive中已经存在了相应的表,则这段代码省略String hiveSql = "CREATE external ...

  8. Mac用Java写出hello,mac中c#的helloworld

    先下载微软提供给其他平台的运行环境 mono 然后再一个文件夹内用 初始化命令 dotnet new 帮忙创建好一些基础文件 然后报错撒,说dotnet的一个什么native的类库找不到 上网一搜op ...

  9. java 多线程操作map_Java 多线程中ConcurrentHashMap并发读写操作范例

    范例1: package com.contoso; import java.util.Random; import java.util.UUID; import java.util.concurren ...

最新文章

  1. 参数估计_数据分析|统计之一个总体参数估计(附代码)
  2. spark(1.1) mllib 源代码分析
  3. Linux之脚本执行
  4. 【Linux】一步一步学Linux——rmdir命令(22)
  5. C语言开发笔记(五)字符串常量
  6. 使用curl登陆上网账号
  7. ext 解析后台返回response.responseText中的数据
  8. C++对象的赋值和复制
  9. 架构组件:基于Shard-Jdbc分库分表,数据库扩容方案
  10. tcga数据下载_TCGA数据下载-GDC
  11. commons-fileupload 上传图片路径到mysql_上传图片到服务器并将图片路径保存到数据库...
  12. Wine——在Linux上运行Windows软件
  13. apache 伪静态转到nginx
  14. Raki的统计学习方法笔记0x9章:EM算法及其推广
  15. 【材料计算】输入文件INCAR
  16. java课程设计报告书_java课程设计报告书模板
  17. 工具分享: 一键保存网页为PDF文件
  18. 对于一个小白来说,遇到的前端问题(3)
  19. 什么是TPS,什么是QPS?
  20. 最新WIFI分销大师小程序源码+带后端/亲测可用

热门文章

  1. python3 opencv 输出中文
  2. python opencv图片编码为h264文件
  3. windows10 64位 Tensorflow安装--CUDA 9.1+cuDNN7.1.1+python3.6.4+tf1.6+vs2017
  4. Cannot evaluate tensor using 'eval' No default session is registered错误问题的解决
  5. PL/SQL保存用户名密码 自定义界面
  6. android 常见异常解决
  7. saltstack mysql_saltstack mysql returner
  8. c bool 类型检查_C语言和C+的区别是什么?8个点通俗易懂的告诉你!
  9. 网页里显示访问的那台服务器,在web服务器中把网页放在那里,才能被访问
  10. oracle将时间加一天,加小时,加分,加秒