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 ...
随机推荐
- (转载)常用JS加密编码算法 五:SHA1算法
(转载)http://neil-yang.iteye.com/blog/703470 /* * A JavaScript implementation of the Secure Hash Algor ...
- FZOJ--2221-- RunningMan 福建第六届省赛
题目链接:http://acm.hust.edu.cn/vjudge/contest/127149#problem/J 题目大意: 因为总共就分三个队,因为两个队都要选取最优的策略,不论B队咋放,要使 ...
- javascript 通过IE ActiveX 获得本机内网ip
<HTML><HEAD><TITLE>WMI Scripting HTML</TITLE> <META http-equiv=Content-Ty ...
- linux 下信号处理命令trap && linux下各种信号的意义
1.用途说明 trap是一个shell内建命令,它用来在脚本中指定信号如何处理.比如,按Ctrl+C会使脚本终止执行,实际上系统发送了SIGINT信号给脚本进程,SIGINT信号的默认处理方式就是退出 ...
- HDU 2298 Toxophily
题目: Description The recreation center of WHU ACM Team has indoor billiards, Ping Pang, chess and bri ...
- hadoop2.2.0集群安装
位说明. 位).Jdk使用的1.7(1.6也可以).网络配置好,相互可以ping通,java环境安装完毕. 第一部分 Hadoop 2.2 下载 位). 下载地址:http://apache.cl ...
- iOS 更好用的打Log方式-显示文件名、行数
单纯的NSLog方式打出的Log没有显示打印语句所在的文件名和行数,下面这种做法会很实用: #ifdef DEBUG # define DLog(fmt, ...) NSLog((@"%s ...
- jQuery判断页面滚动条滚动方向
废话不多说,直接上代码 $(window).scroll(function(){ var before = $(window).scrollTop(); $(window).scroll(functi ...
- Jupyter Notebook PDF输出的中文支持
Jupyter Notebook是什么 Jupyter Notebook是ipython Notebook 的升级.Jupyter能够将实时代码,公式,可视化图表以Cell的方式组织在一起,形成一个对 ...
- 如何调试PHP的Core之获取基本信息 --------风雪之隅 PHP7核心开发者
http://www.laruence.com/2011/06/23/2057.html https://github.com/laruence PHP开发组成员, Zend兼职顾问, PHP7核心开 ...