一、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())!=-1){
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())!=-1){
//对于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;
}
//随机行读取文件
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>4)?4:0;
//将读文件的开始位置移到beginIndex位置
raf.seek(beginIndex);
byte[] bytes=new byte[10];
int byteread=0;
//一次读10个字节,如果文件内容不足10个字节,则读剩下的文字。
//将一次读取的字节数赋给byteread
while((byteread=raf.read(bytes))!=-1){
System.out.write(bytes,0,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();
}
}

Java IO file文件的写入和读取及下载的更多相关文章

  1. Java file文件的写入和读取及下载

    File文件的写入 一.FileWriter 和BufferedWriter 结合写入文件 FileWriter是字符流写入字符到文件.默认情况下,它会使用新的内容代替文件原有的所有内容,但是,当指定 ...

  2. IO流-文件的写入和读取

    1.文件写入 类: FileWriter继承自Writer(字符流基类之一,另外一个为Reader) 方法: writer(参数); 根据参数可以写入字符.字符数组.字符数组中的一部分.整型.字符串. ...

  3. java的bio和nio写入及读取txt文件

    一.bio的写入及读取 1.采用bio之BufferedWriter 写入文件 public static void main(String[] args) throws IOException { ...

  4. JAVA 创建TXT文件,写入文件内容,读取文件内容

    [java]  view plain copy   package com.abin.facade.ws.mail.function; import java.io.BufferedReader; i ...

  5. java获取指定路径下的指定文件/java.io.File.listFiles(FilenameFilter filter)

    java.io.File.listFiles(FilenameFilter filter) 返回抽象路径名数组,表示在目录中此抽象路径名表示,满足指定过滤器的文件和目录. 声明 以下是java.io. ...

  6. 【java】文件操作java.io.File

    package 文件操作; import java.io.File; import java.io.IOException; public class TestFile { public static ...

  7. [java]借助java.io.File类,完成文件批量改名

    列出某目录下的所有文件,将文件改名,借助java.io.File一个类就可以完成.大家可以发现,代码中的具体方法都是File一个类的. 另外要注意的是,File的全路径名,路径是一致的,父路径其实是文 ...

  8. java(IO)读写文件乱码转换UTF-8问题

    java(IO)读写文件乱码转换UTF-8问题 读取文件 String Content = ""; // 文件很长的话建议使用StringBuffer try { FileInpu ...

  9. Java IO编程——文件拷贝

    在操作系统里面有一个copy命令,这个命令的主要功能是可以实现文件的拷贝处理,现在要求模拟这个命令,通过初始化参数输入拷贝的源文件路径与拷贝的目标路径实现文件的拷贝处理. 需求分析: ·需要实现文件的 ...

随机推荐

  1. C#基础:线程之异步回调(委托)

    异步回调,什么是异步回调?我是这样理解的,当主线程在执行一段代码的时候,我们用委托执行了一个线程,这个线程要返回一个结果,关键是什么时候返回这个结果,异步回调就是在这个线程执行完成后立即返回这个线程的 ...

  2. Grid++Report应用(引入项目中)

    1.将Grid++Report安装文件中(\WebSamples\asp.net(csharp)\App_Code)的ReportData.cs,MssqlReportData.cs两个文件复制到自己 ...

  3. Weekly Contest 111-------->942. DI String Match

    Given a string S that only contains "I" (increase) or "D" (decrease), let N = S. ...

  4. 我不知道的C#—字符串池机制

    字符串具有值类型的特点对字符串,对同一个字符串大量修改或者对多个引用赋值同一个字符串对象时会产生大量的临时字符串对象,影响性能,但是CLR为我们做了一些工作来消除这些弊端.      对同一个字符串大 ...

  5. Html5shiv ---- 让IE低版本浏览器识别并支持HTML5标签

    Html5shiv.js是针对IE浏览器的 javaScript 补丁,作用如题 该脚本的下载链接 使用使在head标签中使用script标签引用即可

  6. .Net Core应用框架Util介绍(二) 转

    Util的开源地址 https://github.com/dotnetcore/util Util的开源协议 Util以MIT协议开源,这是目前最宽松的开源协议,你不仅可以用于商业项目,还能把Util ...

  7. 设置导航栏 self.navigationItem.titleView 居中

    喜欢交朋友的加:微信号 dwjluck2013-(void)viewDidLayoutSubviews{ [self setDisplayCustomTitleText:@"每日头条&quo ...

  8. Qt 2D绘图之六:图形视图框架的事件处理与传播

    一.简介 图形视图框架中的事件都是首先由视图进行接收,然后传递给场景,再由场景传递给相应的图形项.而对于键盘事件,它会传递给获得焦点的图形项,可以使用QGraphicsScene类的setFocusI ...

  9. 【aspnetcore】在过滤器(Filter)中使用注入服务(ServiceFilter|TypeFilter)

    在MVC中,AOP是很常用的功能,我们经常会使用如 ActionFilter,IAuthorizeFilter 等描述对Controller和Action进行约束和扩展,一般做法如下: public ...

  10. 打包google浏览器插件到本地

    依次打开‘更多工具’--->'扩展程序',或者在google浏览器输入chrome://extensions/网址就可以打开已安装插件页面,在顶部选中‘开发者模式’后就会出现每个插件的ID,这个 ...