Java file文件的写入和读取及下载
File文件的写入
一、FileWriter 和BufferedWriter 结合写入文件
FileWriter是字符流写入字符到文件。默认情况下,它会使用新的内容代替文件原有的所有内容,但是,当指定一个true值作为FileWriter构造函数的第二个参数,它会保留现有的内容,并追加新内容在文件的末尾。
BufferedWriter:缓冲字符,是一个字符流类来处理字符数据。不同于字节流(数据转换成字节FileOutPutStream),可以直接写字符串、数组或字符数据保存到文件。
默认情况,替换原有内容: new FileWriter(file); 保留原来的文件内容: new FileWriter(file,true)
具体例子如下:
public static void writeInFileByfb() {
File f=new File("E:\\Java\\jmoa\\TestDiff\\src\\test\\resource\\test_fb.txt");
String content="要写入文件的新内容";
FileWriter fw=null;
BufferedWriter bw=null;
try{
if(!f.exists()){
f.createNewFile();
}
fw=new FileWriter(f.getAbsoluteFile(),true); //true表示可以追加新内容
//fw=new FileWriter(f.getAbsoluteFile()); //表示不追加
bw=new BufferedWriter(fw);
bw.write(content);
bw.close();
}catch(Exception e){
e.printStackTrace();
} }
二、FileOutPutStream 字节流写入文件
文件输出流是一种用于处理原始二进制数据的字节流泪。 为了将数据写入到文件中,必须将数据转换为字节,并保存到文件。具体例子如下:
package com.joyplus.test; import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException; public class FileOutPutTest {
public static void main(String[] args) {
FileOutPutTest.writeInFileByfi();
} public static void writeInFileByfi(){
File f=new File("E:\\Java\\jmoa\\TestDiff\\src\\test\\resource\\test_fi.txt");
FileOutputStream fos=null;
try {
if(!f.exists()){
f.createNewFile();
}
fos=new FileOutputStream(f);
String content="要写入的新内容!";
fos.write(content.getBytes());
} catch (IOException e) {
e.printStackTrace();
}finally{
if(fos!=null){
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} }
}
三、RandomAccessFile 写入文件
RandomAccessFile的唯一父类是Object,与其他流父类不同。是用来访问那些保存数据记录的文件的,这样你就可以用seek( )方法来访问记录,并进行读写了。这些记录的大小不必相同;但是其大小和位置必须是可知的.
如下例子是RandomAccessFile如何进行写入文件的例子:
public static void writeInFileByRdA(){
String content="randowAccessFile";
try{
// 打开一个随机访问文件流,按读写方式
RandomAccessFile randomFile = new RandomAccessFile("E:\\Java\\jmoa\\TestDiff\\src\\test\\resource\\test_fb.txt", "rw");
// 文件长度,字节数
long fileLength = randomFile.length();
//将写文件指针移到文件尾。
randomFile.seek(fileLength);
randomFile.writeBytes(content);
randomFile.close();
}catch(Exception e){
e.printStackTrace();
}
}
文件的读取
一、FileInputStream 字节流读取文件 【注意:读取中文的时候会乱码】
具体代码如下:
//按照字节读取文件内容
public static String readFileByByte(){
String s="";
File f=new File("E:\\Java\\jmoa\\TestDiff\\src\\test\\resource\\test_fb.txt");
InputStream in=null;
try{
in=new FileInputStream(f);
int tempByte;
while((tempByte=in.read())!=-){
System.out.println(tempByte);
s+=tempByte;
}
in.close();
}catch(Exception e){
e.printStackTrace();
}
System.out.println("content:"+s);
return s;
}
二、InputStreamReader 字符流读取文件内容
//按照字符读取文件内容
public static String readFileByChar(){
String s="";
File f=new File("E:\\Java\\jmoa\\TestDiff\\src\\test\\resource\\test_fb.txt");
Reader rdr=null;
try{
rdr=new InputStreamReader(new FileInputStream(f));
int temp;
while((temp=rdr.read())!=-){
//对于window下,\r\n这两个字符在一起时,表示一个换行。
//但是如果这两个字符分开显示时,会换两行。
//因此,屏蔽掉\r,或者屏蔽掉\n。否则,将会出现很多空行
if(((char)temp)!='\r'){
s+=(char)temp;
}
}
}catch(Exception e){
e.printStackTrace();
}finally{
try {
rdr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
System.out.println(s);
return s;
}
三、BufferedReader 以行为单位读取文件内容
//按照行读取文件
public static String readFileByLine(){
String s="";
File f=new File("E:\\Java\\jmoa\\TestDiff\\src\\test\\resource\\test_fb.txt");
BufferedReader br=null;
try{
System.out.println("按照行读取文件内容");
br=new BufferedReader(new FileReader(f));
String temp;
while((temp=br.readLine())!=null){
s+=temp;
}
}catch(Exception e){
e.printStackTrace();
}finally{
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
System.out.println("file content:"+s);
return s;
}
四、随机读取文件中的部分内容: RandomAccessFile
//随机行读取文件
public static String readFileByRand(){
String s="";
File f=new File("E:\\Java\\jmoa\\TestDiff\\src\\test\\resource\\test_fb.txt");
RandomAccessFile raf=null;
try{
//打开一个文件流, 按只读方式
raf=new RandomAccessFile(f.getName(), "r");
//文件长度,字节数
long fileLength=raf.length();
//读文件的起始位置
int beginIndex=(fileLength>)?:;
//将读文件的开始位置移到beginIndex位置
raf.seek(beginIndex);
byte[] bytes=new byte[];
int byteread=;
//一次读10个字节,如果文件内容不足10个字节,则读剩下的文字。
//将一次读取的字节数赋给byteread
while((byteread=raf.read(bytes))!=-){
System.out.write(bytes,,byteread);
} }catch(Exception e){
e.printStackTrace();
}finally{
if(raf!=null){
try {
raf.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
//System.out.println("文件内容:"+s);
return s;
}
补充的文件知识:
/**
* 显示输入流中还剩的字节数
*/
private static void showAvailableBytes(InputStream in) {
try {
System.out.println("当前字节输入流中的字节数为:" + in.available());
} catch (IOException e) {
e.printStackTrace();
}
}
文件的下载
// 在线打开方式 下载
public void downLoad(String filePath, HttpServletResponse response,String fileNewName) throws Exception {
File f = new File(filePath);
OutputStream out = response.getOutputStream();
if (!f.exists()) {
response.setCharacterEncoding("UTF-8");
String notFileHtml=getNotFileHtml(filePath,"文件找不到");
out.write(notFileHtml.getBytes("UTF-8"));
out.flush();
return;
}
BufferedInputStream br = new BufferedInputStream(new FileInputStream(f));
byte[] buf = new byte[];
int len = ; response.reset(); // 非常重要
response.setContentType("application/x-msdownload");
response.setHeader("Content-Disposition", "attachment; filename=" + fileNewName); while ((len = br.read(buf)) > )
out.write(buf, , len);
br.close();
out.close();
}
Java file文件的写入和读取及下载的更多相关文章
- Java IO file文件的写入和读取及下载
一.FileWriter 和BufferedWriter 结合写入文件 FileWriter是字符流写入字符到文件.默认情况下,它会使用新的内容代替文件原有的所有内容,但是,当指定一个true值作为F ...
- 装饰者模式的学习(c#) EF SaveChanges() 报错(转载) C# 四舍五入 保留两位小数(转载) DataGridView样式生成器使用说明 MSSQL如何将查询结果拼接成字符串 快递查询 C# 通过smtp直接发送邮件 C# 带参访问接口,WebClient方式 C# 发送手机短信 文件 日志 写入 与读取
装饰者模式的学习(c#) 案例转自https://www.cnblogs.com/stonefeng/p/5679638.html //主体基类 using System;using System.C ...
- INI文件的写入与读取
INI文件的写入与读取 [节名] '[]中的节名对应此API的第一参数 Name=内容 'Nmae对应此API的第二参数 API的第三参数是没有取到匹配内容时返回的字符串; ...
- java 文件操作 写入和读取(小结一)
参考了这篇博客并优化,谢谢:http://blog.sina.com.cn/s/blog_99201d890101b4le.html 功能: 实现通过两个类完成先写入文件,再读取数据计算显示 pac ...
- Java File文件操作 创建文件\目录,删除文件\目录
Java手册 java.io 类 File java.lang.Object java.io.File 所有已实现的接口: Serializable, Comparable<File> p ...
- java实现赋值excel模板,并在新文件中写入数据,并且下载
/** * 生成excel并下载 */ public void exportExcel(){ File newFile = createNewFile(); //File newFile = new ...
- java File文件操作共用方法整理
package org.jelly.util; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io ...
- [转]VC++中对文件的写入和读取
本文转自:http://blog.csdn.net/fanghb_1984/article/details/7425705 本文介绍两种方法对文件进行读取和写入操作:1.采用fstream类:2.采用 ...
- 第十七章,txt文件的写入和读取数据结合练习(C++)
#include <iostream> #include <fstream> int main(int argc, char** argv) { std::string str ...
随机推荐
- android报错——java.lang.ClassNotFoundException[android]
E/AndroidRuntime(1875): Caused by: java.lang.ClassNotFoundException:XXXXX in loader dalvik.system ...
- 正则表达式, 用于Delphi
表示不能为空 : [^\s]+ 只能输入数字和字母: ^[A-Za-z0-9]+$
- HDU-1233 还是畅通工程 (prim 算法求最小生成树)
prim 算法求最小生成树 还是畅通工程 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Oth ...
- 前端模块化开发篇之grunt&webpack篇
几个月前写了一篇有关gulp和browserify来做前端构建的博客,因为browserify用来做js的打包时可能有些麻烦(特别是在写React的时候),所以这里再强烈推荐一款js打包工具-webp ...
- What is happening in Crockford's object creation technique?
What is happening in Crockford's object creation technique? http://stackoverflow.com/questions/27660 ...
- node begining
node begining */--> pre { background-color: #2f4f4f;line-height: 1.6; FONT: 10.5pt Consola," ...
- Netbeans代码配色主题大搜集
我用netbeans的原因之一就是因为其支持代码配色主题,这是个对于一个代码配色字体控来说是非常重要的一个功能.理所当然的,我也会收集各种配色主题来时常换换口味. 下面就是我目前收集的Netbeans ...
- getaccesstoken方法
通过appid和appsecret获取access_token的定义函数 这里用的是memcache缓存存储用户信息7000秒 <?php function getAccessToken($ap ...
- SAP HANA SLT 将Oracle表 数据同步到HANA数据库
简单介绍SLT 同步数据的整个配置过程: 在SLT系统中创建与Oracle的链接 在HANA监控平台上,创建Configuration 创建表的同步作业 ——————————————BEGIN———— ...
- c#判断输入textbox是否为数字
asp.net判断输入文字是否是数字 方案一:/**//// <summary> /// 名称:IsNumberic /// 功能:判断输入的是否是数字 /// 参数:string oTe ...