java读取文件:文本文件
一般使用串行方式读出或者写入文件。总的来说,使用输入流把文件内容读入内存,使用输出流把内存中的信息写出到文件。这些类位于java.io包下。
输入和输出的类和方法往往是对应的
文本文件
先了解如何读写文本文件,然后看如何读写二进制文件。jaVa.ioReader用来读取字符,它的子类FileReader用来读取文本文件。
FileReader打开指定路径下的文件。文件的路径分隔符可以用“\\”或者“/”表示。
“\\”是Windows风格的写法,因为字符串中的特殊字符要转义,所以用两个斜线表示一个斜线。
FileReader fr = new FileReader ("c: Wautoexec.bat"); //打幵文本文件
“/”是Linux风格的路径写法,因为不需要转义,所以正斜线只需要写一个就可以了。
FileReader fr = new FileReader ("c:/autoexec.bat"); //打开文本文件
如果有一堆砖要搬,一次取不完,不会一次只拿一块砖,会尽量多拿几块。如果有很多内
容要读,不会一次只读一个字节,而是一次尽量多读一些字节到缓存。
FileReader fr = new FileReader ("c:/autoexec.bat"); //打开文本文件
BufferedReader br = new BufferedReader (fr); //缓存读
String line;
while ((line = br .readLine ()) != null) { //按行读入文件
System.out.println(line);
}
fr.close(); //关闭文本文件
输入流把数据从硬盘读入随机访问存储器(Random Access Memory,简称RAM)。可以
根据输入流构建BufferedReader,实现代码如下所示。
String fileName = "SDIC.txt"; //文件名
InputStream file = new FilelnputStream (new File (fileName)); //打开输入流
//缓存读入数据
BufferedReader in = new BufferedReader(new InputStreamReader(file,"GBK"));
for循环按行读入一个文件
String fileName = "SDIC.txt"; //文件名
InputStream file = new FilelnputStream (new File (fileName));"打开输入流
//缓存读入数据
BufferedReader in = new BufferedReader(new InputStreamReader(file,"GBK"));
String line = in.readLine();
while (line != null) {
System.out.println (line);
line = in.readLine();
}
in.close ();
一般来说,Writer是把内容立即写到硬盘。如果要多次调用write方法,则批量写入效率会
更高。类似于团购,团购的价格往往比单件购买的价格低。可以使用缓存加快文件写入速度。
//使用缺省的缓存大小
BufferedWriter bw - new BufferedWriter(new FileWriter(fileName));
bw.write (”Hello,China!"); //写入一个字符串
bw.write (”\n”); //写入换行符
bw.write("Hello,World!");
bw.close(); //把缓存中的内容写入文件
使用BufferedWriter写入数据时,最后需要调用BufferedWriter的close方法。如果不关闭
文件,可能导致缓存中的数据丢失,写入文件的数据不完整。
按指定编码写入文本的完整代码如下所示。
/*
* 向文件写入字符串
*
* @param content 字符串
*
* @param fileName 文件名
*
* @param encoding 编码
*/
public static void writeToFile(String content, String fileName,
String encoding) {
try {
FileOutputStream fos = new File0utputStream(fileName);
OutputStreamWriter osw = new OutputStreamWriter(fos, encoding);
BufferedWriter bw = new BufferedWriter(osw);
bw.write(content);
bw.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace(); } }
如果黑板上已经有字,可以选择抹去黑板上已有的字重新写,也可以在原来的文字后继续
写。如果一个文件已经存在,可以把新的内容追加写到最后,也可以从头写入新内容,也就是
覆盖写。FileWriter的构造方法区别于这两种写入方式。
//FileWriter 构造方法 .
FileWriter( String fileName, boolean mode) throws IOException
其中的mode = false表示覆盖写,mode = true表示追加写。为了避免冲突,在一个时刻只
能有一个线程写文件。
java读取文件:文本文件的更多相关文章
- [Java]读取文件方法大全(转)
[Java]读取文件方法大全 1.按字节读取文件内容2.按字符读取文件内容3.按行读取文件内容 4.随机读取文件内容 public class ReadFromFile { /** ...
- Java 读取文件的内容
Java 读取文件的内容 1) CLASS_NAME: 换成自己真实的类名 2) /page/test.json: 换成自己真实的page 3) FileUtils: 来自于org.apache.co ...
- Java读取文件-BufferedReader/FileReader/InputStreamReader/FileInputStream的关系和区别
一.Java读取和存储文件数据流 Java读取文件,实际是将文件中的字节流转换成字符流输出到屏幕的过程 这里面涉及到两个类:InputStreamReader和OutputStreamWriter ...
- Java 读取文件到字符串
Java的io操作比较复杂 package cn.outofmemory.util; import java.io.BufferedReader; import java.io.FileInputSt ...
- java 读取文件流
搬运自速学堂:https://www.sxt.cn/Java_jQuery_in_action/ten-iqtechnology.html JAVA中IO流体系: 四大IO抽象类 ·InputStre ...
- java读取中文文本文件乱码问题
今天遇到的问题是这样:用java读取一个中文文本文件,但读取到的却是乱码,之前一直没有问题,查清楚后,原来是因为今天是用的windows的记事本来编辑的文件,因编码方式是的不同而导致了乱码,解决方法就 ...
- 使用java读取文件夹中文件的行数
使用java统计某文件夹下所有文件的行数 经理突然交代一个任务:要求统计某个文件夹下所有文件的行数.在网上查了一个多小时没有解决.后来心里不爽就决定自己写一个java类用来统计文件的行数,于是花了两个 ...
- Java读取文件的几种方式
package com.mesopotamia.test; import java.io.BufferedReader; import java.io.ByteArrayInputStream; im ...
- java 读取文件——按照行取出(使用BufferedReader和一次将数据保存到内存两种实现方式)
1.实现目标 读取文件,将文件中的数据一行行的取出. 2.代码实现 1).方式1: 通过BufferedReader的readLine()方法. /** * 功能:Java读取txt文件的内容 步骤: ...
- java读取文件
一个字节一个字节地读取 File file = InputStream inputStream = ...
随机推荐
- hdu 5316 Magician 线段树
链接:http://acm.hdu.edu.cn/showproblem.php? pid=5316 Magician Time Limit: 18000/9000 MS (Java/Others) ...
- 使用".."指定git提交范围与"..."指定git提交范围的区别
http://blog.csdn.net/hansel/article/details/8952967 使用".."(两个点)和"..."(三个点)都可以指定一 ...
- tensor搭建--windows 10 64bit下安装Tensorflow+Keras+VS2015+CUDA8.0 GPU加速
windows 10 64bit下安装Tensorflow+Keras+VS2015+CUDA8.0 GPU加速 原文见于:http://www.jianshu.com/p/c245d46d43f0 ...
- 【BZOJ4950】lydsy七月月赛 C 二分图最大匹配
[BZOJ4950]lydsy七月月赛 C 题面 题解:比较直接的想法就是:每行,每列的最大值都留下,剩下的格子都变成1.但是如果一个格子既是行的最大值又是列的最大值,那么我们只需要把它留下即可.这就 ...
- grouped differently across partitions
[熵增] 由无序到有序 http://spark.apache.org/docs/latest/rdd-programming-guide.html#shuffle-operations Shuffl ...
- 点击文本选中checkbox
<checbox文本编辑/> : 只点击checkbox时,才可以选中,点击文本时无法选中 <label><checbox文本编辑/></label ...
- 高精度乘法(FFT)
学会了FFT之后感觉自己征服了世界! 当然是幻觉... 不过FFT还是很有用的,在优化大规模的动规问题的时候有极大效果. 一般比较凶残的计数动规题都需要FFT(n<=1e9). 下面是高精度乘法 ...
- PYTHON 爬虫笔记一:爬虫基本原理梳理
知识点一:爬虫的基本原理梳理 一.什么是爬虫? 请求网站并提取数据的自动化程序 二.爬虫的基本流程 1:向服务器发起请求 通过HTTP库向目标站点发起请求,即发送一个Request,请求可以包含额外的 ...
- codeforces B. Fox and Cross 解题报告
题目链接:http://codeforces.com/problemset/problem/389/B 题目意思:给出一个由n行n列组成的board,其中'#'表示的一片地方恰好能画满十字架,画满的意 ...
- hdu 1715 大菲波数(大数)
题意:整数大数加法 思路:大数模板 #include<iostream> #include<stdio.h> #include<stdlib.h> #include ...