今天在测试直接写的文章:

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【】数组与文件读写(增加新功能)的更多相关文章

  1. java byte【】数组与文件读写

    此文全文参考http://blog.csdn.net/sniffer_wang/article/details/7455701,自己加以改进应用,谢了 import java.io.ByteArray ...

  2. Java 字符流实现文件读写操作(FileReader-FileWriter)

    Java 字符流实现文件读写操作(FileReader-FileWriter) 备注:字符流效率高,但是没有字节流底层 字节流地址:http://pengyan5945.iteye.com/blog/ ...

  3. java byte数组与String互转

      java byte数组与String互转 CreationTime--2018年7月6日14点53分 Author:Marydon 1.String-->byte[] 方法:使用String ...

  4. java byte数组与16进制间的相互转换

      java byte数组与16进制间的相互转换 CreationTime--2018年6月11日15点34分 Author:Marydon 1.准备工作 import java.util.Array ...

  5. 【java学习笔记】文件读写(IO流)

    1.字节流 FileInputStream.FileOutputStream ①FileInputStream import java.io.FileInputStream; public class ...

  6. byte数组和文件的相互转换

    /** * 获得指定文件的byte数组 */ private byte[] getBytes(String filePath){ byte[] buffer = null; try { File fi ...

  7. java byte数组与int,long,short,byte转换

    public class DataTypeChangeHelper { /** * 将一个单字节的byte转换成32位的int * * @param b * byte * @return conver ...

  8. java byte数组与String的相互转换

    String  ->   byte数组 String str = "abc天"; byte[] btr = str.getBytes(); System.out.printl ...

  9. 面试题思考:Java 8 / Java 7 为我们提供了什么新功能

    Java 7 的7个新特性 1.对集合类的语言支持: 2.自动资源管理: 3.改进的通用实例创建类型推断: 4.数字字面量下划线支持: 5.switch中使用string: 6.二进制字面量: 7.简 ...

随机推荐

  1. Scala中function的理解

    在函数式语言中,函数是和value一样地位的一等公民,他可以作为变量,或者作为参数传递给另一个函数 ##作为变量 val f=(x:Int)=>x+1 为啥可以这样写? 由于scala是OOP, ...

  2. POJ 2395 Out of Hay

    这个问题等价于求最小生成树中权值最大的边. #include<cstdio> #include<cstring> #include<cmath> #include& ...

  3. 微信小程序一些简单的快捷键

    常用快捷键 格式调整 Ctrl+S:保存文件Ctrl+[, Ctrl+]:代码行缩进Ctrl+Shift+[, Ctrl+Shift+]:折叠打开代码块Ctrl+C Ctrl+V:复制粘贴,如果没有选 ...

  4. 在阿里云ECS(CentOS6.5)上安装redis

    下载所需的redis 命令: wget http://download.redis.io/releases/redis-3.0.7.tar.gz 结果: 解压redis压缩文件: 命令: .tar.g ...

  5. js中,怎么解决cookie里面中文乱码问题

    呵呵,我查了百度和谷歌,都没找到解决方案,但是,最终直接结合两个函数就可以了,哈哈哈,开心ing function getCookie(name) { var prefix = name + &quo ...

  6. realvnc viewer 5.3.2无需输入用户名和密码访问远程桌面

    我从https://www.realvnc.com/download/viewer/下载了realvnc viewer用于访问远程的Linux桌面,这个版本不需要安装,直接运行就可以了.但在访问远程桌 ...

  7. 微信小程序问题2:未配置

    app.json 中未配置当前页面 pages/swipertest/swipertest 请检查后重试.console.error(`PAGE DEFINE ERRORapp.json 中未配置,当 ...

  8. IOS开发-UI学习-UITextField的各种属性设置

    UITextField是IOS中非常常用的一个控件,用来接收用户输入信息,完成应用和用户的交互.它的主要属性设置如下: //初始化textfield并设置位置及大小 UITextField *text ...

  9. Hao Yin Jian 寒假第一周

    题目链接:https://vjudge.net/contest/147561#problem/A 题意:除法运算,abcde / fghij = n,从小到大输出,其中abcdefghij为0~9的不 ...

  10. 一 APPIUM基本理论知识

    1.APPIUM介绍 Appium 是一个自动化测试开源工具,支持 iOS 平台和 Android 平台上的原生应用,web 应用和混合应用.所谓的“移动原生应用”是指那些用 iOS SDK 或者 A ...