昨天晚上学习了Java的io流操作,今天过来就想试试看,练习一下。
先练习了字节流输入输出操作,使用的类是FileInputStream和FileOutputStream。
package com.sxt;
import java.io.*;
public class Filedemo {
private static Object FilenameFilter;
public static void main(String[] args) {
File f=new File("E:\text");
FileInputStream fis=null;
FileOutputStream fos = null;
try {
fis=new FileInputStream("E:/text/001.txt");
fos=new FileOutputStream("E:/text/002.txt");
int temp=0,i=0;
temp=fis.read();
for (;temp!=-1;temp=fis.read()){
System.out.print((char)temp+"t");
}
}catch (Exception e){
e.printStackTrace();
}finally {
try {
if (fos!=null){
fos.close();
}
if (fis!=null){
fis.close();
}
}catch (Exception e){
e.printStackTrace();
}
}
}
}
调用fis.read,逐个字节读取txt文件中的字符,文件的打开关闭操作设置好异常,然后开始程序发现输出结果和我想要的结果不匹配。
想起昨晚学习时老师说windos系统的换行操作是利用’r‘’n‘两个字符的???
'r'表示回车
'n'表示换行
而Java之中,'r'表示光标移动到最左侧,可以测试一下
System.out.print("123456789"+"n");
System.out.print("12345678"+"n");
System.out.print("=============="+"n");
System.out.print("123456789"+"r");
System.out.print("12345678"+"r");
结果明显表示,’r‘导致光标移动到最左侧,重写打印覆盖了前面的输出。
因此当打印txt文本时带上判断语句当遇到'r'的时候进行跳过
for (;temp!=-1;temp=fis.read()){
if ((char)temp!='r') {
System.out.print((char) temp + "t");
if ((char) temp == 'n')
System.out.print('r');
}
}
输出结果如下:
考虑是当遇到'r'时跳过,遇到'n'时换行,然后输出语句后面有一个t制表符,让除了第一行的其余行多一个't' 。
然后想着加一个判断,当是n时重新加一个'r',回到第二行最左侧。
for (;temp!=-1;temp=fis.read()){
if ((char)temp!='r') {
System.out.print((char) temp + "t");
if ((char) temp == 'n')
System.out.print('r');
}
}
总结,记住windows系统里面,回车的操作是'rn'两步,如果进行io流输出文本文件的时候,要将’r‘操作剔除。



