java 写流,Java IO中的其他读写流
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中的其他读写流相关推荐
- Java写文件导致io过高_161108、Java IO流读写文件的几个注意点
平时写IO相关代码机会挺少的,但却都知道使用BufferedXXXX来读写效率高,没想到里面还有这么多陷阱,这两天突然被其中一个陷阱折腾一下:读一个文件,然后写到另外一个文件,前后两个文件居然不一样? ...
- java makefile jar包_java makefile学习实践(编译的javac命令写在makefile中,运行命令java写在shell脚本中)...
学习makefile教程,ubuntu中文网 1.写一个简单的java项目,不需要外部jar,用的简单的 importjava.util.ArrayList;是可以从CLASSPATH环境变量中找到的 ...
- java高级流低级流定义_java中哪些是低级流?哪些是高级流?
引用来自"静心天涯"的评论 在输入输出里,有字节流和字符流分,这两者区别在于所操作的数据单元不同.还有另外一种认识,输入输出流可以分为节点刘和处理流(包装流),节点流有时候会被称为 ...
- java写wss,JAVA模拟WebSocket客户端,支持wss ssl证书
背景:websocket在Html5里面有着举足轻重的地位,最近工做中须要对websocket接口进行压测,使用jmeter的websocket sample进行,可是通常现网的websocket都是 ...
- 【JavaIO流】JavaIO中的常用处理流
JavaIO中的常用处理流 在前面,我们了解了有关JavaIO流基础的使用,其中对于IO流来说最基础的四大基类就是InputStream.OutputStream.Reader.Writer.而我们对 ...
- java socket 读取文件_java中ServerSocket读取文件流不是分行读取
在学习socket的TCP通讯 在使用 TCP传一个文件时 遇到这样两个问题 1. 服务端流读取时一次性读了所有内容 而不是分行读取 2. 自动刷新不生效 代码如下 package com.fuge. ...
- 小技巧:用python迅速打印Java写 的Flink代码中的hive建表语句
假设我们想要用Flink对hive进行读写, 并且其中一段代码如下: // 如果hive中已经存在了相应的表,则这段代码省略String hiveSql = "CREATE external ...
- Mac用Java写出hello,mac中c#的helloworld
先下载微软提供给其他平台的运行环境 mono 然后再一个文件夹内用 初始化命令 dotnet new 帮忙创建好一些基础文件 然后报错撒,说dotnet的一个什么native的类库找不到 上网一搜op ...
- java 多线程操作map_Java 多线程中ConcurrentHashMap并发读写操作范例
范例1: package com.contoso; import java.util.Random; import java.util.UUID; import java.util.concurren ...
最新文章
- 参数估计_数据分析|统计之一个总体参数估计(附代码)
- spark(1.1) mllib 源代码分析
- Linux之脚本执行
- 【Linux】一步一步学Linux——rmdir命令(22)
- C语言开发笔记(五)字符串常量
- 使用curl登陆上网账号
- ext 解析后台返回response.responseText中的数据
- C++对象的赋值和复制
- 架构组件:基于Shard-Jdbc分库分表,数据库扩容方案
- tcga数据下载_TCGA数据下载-GDC
- commons-fileupload 上传图片路径到mysql_上传图片到服务器并将图片路径保存到数据库...
- Wine——在Linux上运行Windows软件
- apache 伪静态转到nginx
- Raki的统计学习方法笔记0x9章:EM算法及其推广
- 【材料计算】输入文件INCAR
- java课程设计报告书_java课程设计报告书模板
- 工具分享: 一键保存网页为PDF文件
- 对于一个小白来说,遇到的前端问题(3)
- 什么是TPS,什么是QPS?
- 最新WIFI分销大师小程序源码+带后端/亲测可用
热门文章
- python3 opencv 输出中文
- python opencv图片编码为h264文件
- windows10 64位 Tensorflow安装--CUDA 9.1+cuDNN7.1.1+python3.6.4+tf1.6+vs2017
- Cannot evaluate tensor using 'eval' No default session is registered错误问题的解决
- PL/SQL保存用户名密码 自定义界面
- android 常见异常解决
- saltstack mysql_saltstack mysql returner
- c bool 类型检查_C语言和C+的区别是什么?8个点通俗易懂的告诉你!
- 网页里显示访问的那台服务器,在web服务器中把网页放在那里,才能被访问
- oracle将时间加一天,加小时,加分,加秒