Java 输入流读取文本文件换行符问题
一问题
在学习流编程的过程中,我遇到了一下问题。首先来看一下我写的java源程序:
package StreamLearn;
import java.io.*;
public class TestFileInputStream {
public static void main(String[] args) {
int count=0;
FileInputStream in=null;
try{
in =new FileInputStream("c:\\a.java");
}catch(FileNotFoundException e)
{
System.out.println("can not find it");
System.exit(1);
}
long num=0;
try{
while((count=in.read())!=-1){
System.out.print((char)count);
//System.out.println(count);
num++;
}
}catch(IOException e)
{
e.printStackTrace();
}
System.out.println("\n字符个数:"+num);
}
}
该代码功能十分简单,从a.java文件中读取字符,并统计个数。让我们来看一下a.java文件中的具体内容:
程序的运行结果如下:
123
456
字符个数:10
问题出现,本来只有6个字符为什么会变为8个字符呢?让我们对源代码进行改进:
package StreamLearn;
import java.io.*;
public class TestFileInputStream {
public static void main(String[] args) {
int count=0;
FileInputStream in=null;
try{
in =new FileInputStream("c:\\a.java");
}catch(FileNotFoundException e)
{
System.out.println("can not find it");
System.exit(1);
}
long num=0;
try{
while((count=in.read())!=-1){
//System.out.print((char)count);
System.out.println(count);
num++;
}
}catch(IOException e)
{
e.printStackTrace();
}
System.out.println("\n字符个数:"+num);
}
}
运行结果如下:
49
50
51
13
10
52
53
54
字符个数:8
查询ASCII表,得知1对应ASCII值为49,一直到6为54。多出来的字符对应的ASCII值为13和10,其中13对应为归位符,10为换行符。有关归位与换行的区别请参考我的博客:
http://blog.csdn.net/leixingbang1989/article/details/12056193,在此不多介绍。
总结:
在文件中,换行需要占两个字节,分别对应‘/r’‘/n’,在对文件字符进行统计与编码时,应特别注重该问题。
Java 输入流读取文本文件换行符问题的更多相关文章
- 【转载】Java中的回车换行符/n /r /t
source:http://hane00.blog.163.com/blog/static/1600615220126204446809/ '\r'是回车,'\n'是换行,前者使光标到行首,后者使光标 ...
- [转]Java中的回车换行符/n /r /t
'\r'是回车,'\n'是换行,前者使光标到行首,后者使光标下移一格.通常用的Enter是两个加起来.下面转一篇文章. 回车和换行 今天,我总算搞清楚"回车"(carriage r ...
- Java中的回车换行符/n /r /t
'\r'是回车,'\n'是换行,前者使光标到行首,后者使光标下移一格.通常用的Enter是两个加起来.下面转一篇文章. 回车和换行 今天,我总算搞清楚“回车”(carriage return)和“换行 ...
- 【java】java下载文件中换行符 在windows和linux下通用的
请使用: public static final String FILE_CONTENT_SPLIT_MARK = "\r\n"; 注意 不是"\n\r",顺序 ...
- java中读取文本文件的时候@Test方法中没有中文乱码,但是@Controller中却有中文乱码
今天遇到了一个非常牛逼的BUG,在@Test标注的测试类中没有中文乱码,但是访问@Controller标注的接口却报中文乱码,找了一系列资料以及各种尝试之后,发现是因为eclipse编辑工具字符编码的 ...
- java在文件中输出换行符
在字符串后面添加\r\n就可以了. 或者使用newline方法: FileOutputStream fos=new FileOutputStream("c:\\11.txt") ...
- C#写文本文件,如何换行(添加换行符)
把文本写到文件中,如果是几段文字拼合起来输出到文件中,通常每段非结尾文字后需要添加换行符,不然几段文字都变成一段. 在 C# 中,文本换行有两种方法,一种在需要换行的文本后面添加换行符 \r\n 即可 ...
- fgets()函数读取键盘,去掉换行符或丢弃多余的字符
在上一遍随笔中,我们知道可以用fgets()函数来代替不安全的gets()函数.fgets函数中的第二个参数限制了读取的个数. 上篇文章也提到,fgets是会读取回车换行符的.有时候我们并不希望在字符 ...
- Java文件写入,换行
import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOExce ...
随机推荐
- Dr.com校园网客户端故障解决方法
一,登录客户端的时候提示“登录超时失败” 解决办法:单击桌面右下角的联网图标然后右键,打开网络和共享中心,在左侧导航栏中找到更改网络适配器,找到本地连接(或者无线连接),点击右键找到详细信息,看看ip ...
- FFMPEG高级编程第一篇:环境搭建及编译
前段时间在翻看电脑里面资料时,发现了以前做的在嵌入式硬件上面运行以ffmepg为基础,以嵌入式硬件解码的多媒体播放工作,发现都快忘记完了.今日得闲整理温习了一下ffmpeg在嵌入式上的运用,这里给大家 ...
- Linux 网络相关命令
1.修改ip,dns相关:sudo vi /etc/sysconfig/network-scripts/ifcfg-eth0 2.ifconfig 查找ip,mac地址 3.重启网络:sudo ser ...
- 01_SpringMVC流程架构图
[组件说明] 以下组件通常使用框架提供实现: 1.DisPatcherServlet:前端控制器(不需要程序员开发) 用户请求到达前端控制器,它相当于MVC模式中的C(Controller),Disp ...
- Unity中使物体自动寻路的方法
在做一个FPS游戏时,需要敌方自动找到玩家方位并向玩家移动,在查找资料(并走了不少坑)后,我试了三个方法,经测试,这三个方法都能实现自动寻路功能. 方法一:使用Mathf.Lerp()方法 代码很简单 ...
- redis 入门笔记(一)
redis是一个开源,先进的key-value存储,并用于构建高性能,可扩展的web应用程序的完美解决方案 三个主要特点: 1,Redis数据库完全在内存中,使用磁盘仅用于持久性 ...
- HDOJ(1000) A + B Problem
代码如下: #include <stdio.h> int main(void) { int a, b; ){ printf("%d\n", a+b); } ; }
- Linux查找软件的安装路径
软件安装的路径可能不止一个,可以使用whereis命令查看软件安装的所有路径,以mysql为例: whereis mysql 该命令会返回软件的所有安装路径: mysql: /usr/bin/mysq ...
- [PHP]htmlentities() 函数
定义和用法 htmlentities() 函数把字符转换为 HTML 实体. 语法 htmlentities(string,quotestyle,character-set) 参数 描述 string ...
- iis7如何取消目录的可执行权限
我们需要把IIs中某一个目录的可执行权限去掉.这在IIs6中是非常方便的,可是因为iis7的机制小编也找了不少资料才找到. 第一步:先选择需要取消权限的目录,然后在右边可以看到 “处理程序映射” 双击 ...