日期:2014-05-20  浏览次数:20881 次

初学I/O问题,求解惑
安装任何一个软件,都有一个安装协议给大伙儿看,我突发奇想,想自己写一个
【PS:我是java新手,没学java语法,直接swing后,需要用哪里就学哪里,刚开始I/O】

我首先写了一个管理员的输入框界面和一个用户的查看界面
输入框界面里,打算从输入框输入一堆文字, 然后放入文本in.txt中,这不是问题。
为了保证in.txt安全,我在完成in.txt时生成out.txt。

问题在于用户查看界面,我打算用一个string[]或StringBuffer接收out.txt的内容,然后把string[]或StringBuffer输出到显示文字的显示框
里。但是,out.txt有汉字!而且基本是汉子,我搞了很久!终于发现,我不会接受空格键以及不知道结束判别标志!

提问:
怎么在string[]或StringBuffer里接收空格键。比如
---out.txt--------
---注意事项:
---1、吃饭
---(此处空格)
---2、睡觉
---(此处空格)
---3、洗澡
-----------------
1、如果是string[],定义[]的大小是个问题,我打算顶一个int getLine()来获取行数,
然后line = getLine(); 最后new String[line].
但是吧,有个问题,我定义的getLine()获取不了空格!,比如上面的out.txt,我定义的结果是3而不是5,不知道各位有没有什么法子获取空格键!

2、如果是StringBuffer,我就更不知道怎么做了,求解析

3、我自己写的if(string != ‘\n’)报错string不能比对字符,而“\r”显然不现实,这是个字符串而不是转义字符,所以请问,java在文本中每一行的读取的结束标志是什么,java表示是什么啊,求教?

------解决方案--------------------
java由现成的包装好的io,不用像C语言那么辛苦
java的BufferedReader可以一次读一行 有缓冲 结束用Reader接口的ready()方法判断
显示的时候System.getProperty("line.separator")可以换行,在windows中是"\r\n",linux是"\n"
空格不知道你是否要去除 如果照原样显示的话 不用管它 (如果要string != ‘\n’,改为!"a string".equals("\n") )

具体讲
假设out.txt在项目根目录 不是src下


import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.io.StringWriter;

public class ReadFile {
public static void main(String[] args) 
throws IOException { 
System.out.println(read("out.txt"));
}


public static String read(String filename) throws IOException { 
    BufferedReader in = new BufferedReader( 
      new FileReader(filename)); 
    StringBuilder sb = new StringBuilder(); 
    while(in.ready()) 
      sb.append(in.readLine() + System.getProperty("line.separator"));
    return sb.toString(); 
  } 

}

------解决方案--------------------
你是不是从out.txt中每次用readLine读一行的时候,没有自己加一个换行"\n",JTextArea(string),你往这个string加"\n"试下