java byte【】数组与文件读写(增加新功能)
今天在测试直接写的文章:
java byte【】数组与文件读写
时,想调用FileHelper类对字节数组以追加的方式写文件,结果无论怎样竟然数据录入不全,重新看了下文件的追加模式,提供了两种方式:
方式一:
字节数组写入文件(不追加)
//将byte数组写入文件
public void createFile(String path, byte[] content) throws IOException { FileOutputStream fos = new FileOutputStream(path); fos.write(content);
fos.close();
}
在此基础上更改为:字节数组写入文件(追加)
/* 方法1:
* 将byte数组(追加)写入文件
*
* */
public void createFileAdd(String path, byte[] content, boolean Appendable) throws IOException {
// 程序写好之后每次存储数据都刷新
//FileOutputStream fos = new FileOutputStream(path);
// 研究了一下,原来FileOutPutStream也可以设置模式的,只是和openFileOutput不一样 我这样写FileOutputStream fos=new FileOutputStream(_sdpath1,Appendable);就可以实现数据追加功能
FileOutputStream fos=new FileOutputStream(path,Appendable);
fos.write(content);
fos.write("\r\n".getBytes());
fos.close();
}
方式二:
直接写一个方法,该方法中的核心代码在需要哪种方式(追加或者不追加)时,注释更改即可
/**
* 方法二:
* 根据byte数组,生成文件
*/
public void writeFile(byte[] bfile, String filePath,String fileName) {
BufferedOutputStream bos = null; File file = null;
try {
File dir = new File(filePath);
if(!dir.exists()&&dir.isDirectory()){//判断文件目录是否存在
dir.mkdirs();
}
file = new File(filePath+"\\"+fileName);
/* 使用以下2行代码时,不追加方式*/
/*bos = new BufferedOutputStream(new FileOutputStream(file));
bos.write(bfile); */ /* 使用以下3行代码时,追加方式*/
bos = new BufferedOutputStream(new FileOutputStream(file, true));
bos.write(bfile);
bos.write("\r\n".getBytes()); bos.flush(); } catch (Exception e) {
e.printStackTrace();
} finally {
if (bos != null) {
try {
bos.close();
} catch (IOException e1) {
e1.printStackTrace();
}
} }
}
总之,对字节数组的操作类,提供上来,供以后复习用:
import java.io.BufferedOutputStream;
import java.io.BufferedWriter;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStreamWriter; public class FileHelper {
//第一种获取文件内容方式
public byte[] getContent(String filePath) throws IOException {
File file = new File(filePath); long fileSize = file.length();
if (fileSize > Integer.MAX_VALUE) {
System.out.println("file too big...");
return null;
} FileInputStream fi = new FileInputStream(file); byte[] buffer = new byte[(int) fileSize]; int offset = 0; int numRead = 0; while (offset < buffer.length && (numRead = fi.read(buffer, offset, buffer.length - offset)) >= 0) { offset += numRead; } // 确保所有数据均被读取 if (offset != buffer.length) { throw new IOException("Could not completely read file "+ file.getName()); } fi.close(); return buffer;
} //第二种获取文件内容方式
public byte[] getContent2(String filePath) throws IOException
{
FileInputStream in=new FileInputStream(filePath); ByteArrayOutputStream out=new ByteArrayOutputStream(1024); System.out.println("bytes available:"+in.available()); byte[] temp=new byte[1024]; int size=0; while((size=in.read(temp))!=-1)
{
out.write(temp,0,size);
} in.close(); byte[] bytes=out.toByteArray();
System.out.println("bytes size got is:"+bytes.length); return bytes;
}
//将byte数组写入文件
public void createFile(String path, byte[] content) throws IOException { FileOutputStream fos = new FileOutputStream(path); fos.write(content);
fos.close();
}
/* 方法1:
* 将byte数组(追加)写入文件
*
* */
public void createFileAdd(String path, byte[] content, boolean Appendable) throws IOException {
// 程序写好之后每次存储数据都刷新
//FileOutputStream fos = new FileOutputStream(path);
// 研究了一下,原来FileOutPutStream也可以设置模式的,只是和openFileOutput不一样 我这样写FileOutputStream fos=new FileOutputStream(_sdpath1,Appendable);就可以实现数据追加功能
FileOutputStream fos=new FileOutputStream(path,Appendable);
fos.write(content);
fos.write("\r\n".getBytes());
fos.close();
}
/**
* 方法二:
* 根据byte数组,生成文件
*/
public void writeFile(byte[] bfile, String filePath,String fileName) {
BufferedOutputStream bos = null; File file = null;
try {
File dir = new File(filePath);
if(!dir.exists()&&dir.isDirectory()){//判断文件目录是否存在
dir.mkdirs();
}
file = new File(filePath+"\\"+fileName);
/* 使用以下2行代码时,不追加方式*/
/*bos = new BufferedOutputStream(new FileOutputStream(file));
bos.write(bfile); */ /* 使用以下3行代码时,追加方式*/
bos = new BufferedOutputStream(new FileOutputStream(file, true));
bos.write(bfile);
bos.write("\r\n".getBytes()); bos.flush(); } catch (Exception e) {
e.printStackTrace();
} finally {
if (bos != null) {
try {
bos.close();
} catch (IOException e1) {
e1.printStackTrace();
}
} }
}
}
FileHelper.java
java byte【】数组与文件读写(增加新功能)的更多相关文章
- java byte【】数组与文件读写
		
此文全文参考http://blog.csdn.net/sniffer_wang/article/details/7455701,自己加以改进应用,谢了 import java.io.ByteArray ...
 - Java 字符流实现文件读写操作(FileReader-FileWriter)
		
Java 字符流实现文件读写操作(FileReader-FileWriter) 备注:字符流效率高,但是没有字节流底层 字节流地址:http://pengyan5945.iteye.com/blog/ ...
 - java byte数组与String互转
		
java byte数组与String互转 CreationTime--2018年7月6日14点53分 Author:Marydon 1.String-->byte[] 方法:使用String ...
 - java byte数组与16进制间的相互转换
		
java byte数组与16进制间的相互转换 CreationTime--2018年6月11日15点34分 Author:Marydon 1.准备工作 import java.util.Array ...
 - 【java学习笔记】文件读写(IO流)
		
1.字节流 FileInputStream.FileOutputStream ①FileInputStream import java.io.FileInputStream; public class ...
 - byte数组和文件的相互转换
		
/** * 获得指定文件的byte数组 */ private byte[] getBytes(String filePath){ byte[] buffer = null; try { File fi ...
 - java byte数组与int,long,short,byte转换
		
public class DataTypeChangeHelper { /** * 将一个单字节的byte转换成32位的int * * @param b * byte * @return conver ...
 - java byte数组与String的相互转换
		
String -> byte数组 String str = "abc天"; byte[] btr = str.getBytes(); System.out.printl ...
 - 面试题思考:Java 8 / Java 7 为我们提供了什么新功能
		
Java 7 的7个新特性 1.对集合类的语言支持: 2.自动资源管理: 3.改进的通用实例创建类型推断: 4.数字字面量下划线支持: 5.switch中使用string: 6.二进制字面量: 7.简 ...
 
随机推荐
- AOP:代理实现方式①通过继承②通过接口
			
文件结构: 添加日志: package com.wangcf.manager; public class LogManager { public void add(){ System.out.prin ...
 - (中等) POJ 2991 Crane , 几何+线段树。
			
Description ACM has bought a new crane (crane -- jeřáb) . The crane consists of n segments of variou ...
 - IOS开发-OC学习-Foundation框架练习
			
OC语言Foundation框架中字典.字符串.数组的应用: NSString *string = @"China|Usa|France"; NSArray *array = [s ...
 - Mybatis学习(6)动态加载、一二级缓存
			
一.动态加载: resultMap可以实现高级映射(使用association.collection实现一对一及一对多映射),association.collection具备延迟加载功能. 需求: 如 ...
 - docker网络访问(三)
			
docker网络访问 ifconfig查看网卡,启动docker的时候,docker会帮我们创建一个docker0的网桥. 1.随机映射 docker run -P 2.指定映射 -p hostPor ...
 - 动态添加试题选项按钮 radioButton(一)
			
最近在做WebView加载试题的功能,但是选项按钮如果放的WebView中,点击时反应很慢.于是把选项用原生的RadioButton,而试题题目和答案放在WebView中.但是选项的个数不确定,所以需 ...
 - Html5 touch event
			
HTML5 for the Mobile Web: Touch Events POSTED BY RUADHAN - 15 AUG 2013 See also... Touch-friendly Dr ...
 - 那就用pthon来写个跳板机吧
			
1.需求 程序一: 1.后台管理 - 堡垒机上创建用户和密码(堡垒机root封装的类,UserProfile表) - .bashrc /usr/bin/python3 /data/bastion.py ...
 - windows批处理實例
			
實例: 假設我們有個資料夾為d:\tmp和e:\tmp ,而我們只要將d:\tmp中有異動的檔案複製到e:\tmp下的話,用法如下 xcopy d:\tmp\. e:\tmp\ /D /S /Y 實例 ...
 - c# silverlight
			
分享 tsc 条码打印机 打印控件 调用方法 , c# silverlight 下载 TSCLIB.dll http://download.csdn.net/detail/peiyu_peiyu/47 ...