RandomAccessFile类
2016-05-02 16:31
183 查看
/*
* r代表以可读方式打开。
* rw代表以可写的方式打开。
*/
读取文件
public static void randomRead(File file, int pointer){
RandomAccessFile randomAccessFile = null;
try {
randomAccessFile = new RandomAccessFile(file, "r");
randomAccessFile.seek(pointer);
byte[]bytes = new byte[1024];
int hasRead = 0;
while((hasRead = randomAccessFile.read(bytes)) != -1){
System.out.println(new String(bytes,0,hasRead));
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if (randomAccessFile != null) {
try {
randomAccessFile.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
/*
* 写文件
*/
public static void randomWrite(File file,String appendContent,long seek){
RandomAccessFile randomAccessFile = null;
try {
randomAccessFile = new RandomAccessFile(file,"rw");
randomAccessFile.seek(randomAccessFile.length());
randomAccessFile.write(appendContent.getBytes());
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/*
*
*/
插入文件
public static void insertByRandomAccessFile(File file, long pointer,String insertContent){
try {
File tempFile = File.createTempFile("temp", null);//创建一个新的文件存放。
tempFile.deleteOnExit();
RandomAccessFile randomAccessFile = new RandomAccessFile(file,"rw");
FileOutputStream fileOutputStream = new FileOutputStream(tempFile);
FileInputStream fileInputStream = new FileInputStream(tempFile);
//用来读写新的文件。
randomAccessFile.seek(pointer);//设置指针偏移量
System.out.println(randomAccessFile.getFilePointer());//打印出第一次指针的位置。
byte[] bytes = new byte[1024];
int hasRead = 0;
while((hasRead = randomAccessFile.read(bytes)) != -1){
fileOutputStream.write(bytes, 0, hasRead);
//从第一个偏移量开始,并写入流中,存入到新的文件中。
}
randomAccessFile.seek(pointer);//随着while循环,偏移量也会变化,需要重新回到之前的位置。
fileOutputStream.flush();
//从此时写入要插入的数据内容覆盖写入源文件中。
randomAccessFile.write(insertContent.getBytes());
//而此时偏移量也到了写入内容的后面。
while((hasRead = fileInputStream.read(bytes)) != -1){
randomAccessFile.write(bytes, 0, hasRead);
// 这时将之前从指定偏移量之后复制的新文件,并在此覆盖的写入此时文件偏移量开始之处。
}
randomAccessFile.close();
fileOutputStream.close();
fileInputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
* r代表以可读方式打开。
* rw代表以可写的方式打开。
*/
读取文件
public static void randomRead(File file, int pointer){
RandomAccessFile randomAccessFile = null;
try {
randomAccessFile = new RandomAccessFile(file, "r");
randomAccessFile.seek(pointer);
byte[]bytes = new byte[1024];
int hasRead = 0;
while((hasRead = randomAccessFile.read(bytes)) != -1){
System.out.println(new String(bytes,0,hasRead));
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if (randomAccessFile != null) {
try {
randomAccessFile.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
/*
* 写文件
*/
public static void randomWrite(File file,String appendContent,long seek){
RandomAccessFile randomAccessFile = null;
try {
randomAccessFile = new RandomAccessFile(file,"rw");
randomAccessFile.seek(randomAccessFile.length());
randomAccessFile.write(appendContent.getBytes());
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/*
*
*/
插入文件
public static void insertByRandomAccessFile(File file, long pointer,String insertContent){
try {
File tempFile = File.createTempFile("temp", null);//创建一个新的文件存放。
tempFile.deleteOnExit();
RandomAccessFile randomAccessFile = new RandomAccessFile(file,"rw");
FileOutputStream fileOutputStream = new FileOutputStream(tempFile);
FileInputStream fileInputStream = new FileInputStream(tempFile);
//用来读写新的文件。
randomAccessFile.seek(pointer);//设置指针偏移量
System.out.println(randomAccessFile.getFilePointer());//打印出第一次指针的位置。
byte[] bytes = new byte[1024];
int hasRead = 0;
while((hasRead = randomAccessFile.read(bytes)) != -1){
fileOutputStream.write(bytes, 0, hasRead);
//从第一个偏移量开始,并写入流中,存入到新的文件中。
}
randomAccessFile.seek(pointer);//随着while循环,偏移量也会变化,需要重新回到之前的位置。
fileOutputStream.flush();
//从此时写入要插入的数据内容覆盖写入源文件中。
randomAccessFile.write(insertContent.getBytes());
//而此时偏移量也到了写入内容的后面。
while((hasRead = fileInputStream.read(bytes)) != -1){
randomAccessFile.write(bytes, 0, hasRead);
// 这时将之前从指定偏移量之后复制的新文件,并在此覆盖的写入此时文件偏移量开始之处。
}
randomAccessFile.close();
fileOutputStream.close();
fileInputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
相关文章推荐
- Java基础知识
- java基础(一)
- 怎样学习java,漫谈java学习之路
- 设置jdk环境变量时lib中的rt.jar ,dt.jar ,tool.jar是什么,作用是什么
- Java 集合系列11之 Hashtable详细介绍(源码解析)和使用示例
- 学习日志---treemap
- java基础知识笔记
- java中web应用中重定向与转发的区别
- java基础篇---枚举详解
- java基础数据类型包装类
- equals与null
- 【Java基础】Java入门程序&基础数据类型(转换)&逻辑判断&运算等
- Java.基础(学习笔记)
- 一个简单的加密解密程序
- 20160411--相等测试与继承
- 【代码练习】用FIle.list()打印多级目录
- 【学习日记】有关java的IO的知识点总结
- JAVA基础-IO流
- 用java解决约瑟夫问题
- date and time