初学I/O问题,求解惑

weidu23 2013-02-12 06:38:42
安装任何一个软件,都有一个安装协议给大伙儿看,我突发奇想,想自己写一个
【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表示是什么啊,求教?
...全文
332 5 点赞 打赏 收藏 举报
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
weidu23 2013-02-13
引用 1 楼 valid25f 的回复:
java由现成的包装好的io,不用像C语言那么辛苦 java的BufferedReader可以一次读一行 有缓冲 结束用Reader接口的ready()方法判断 显示的时候System.getProperty("line.separator")可以换行,在windows中是"\r\n",linux是"\n" 空格不知道你是否要去除 如果照原样显示的话 不用管它 (如果要string != ‘……
谢谢你! 请恕我啰嗦,我还想问些: 昨晚按你的写了下,后来发现我天真了,我以为只要把string写进JTextArea(string),就可以实现显示 “协议”中的文字,但我错了,理由如下: 假设out.txt: 1、你好 2、你很好 那么显示的不是如上的形式,而是: 1、你好2、你很好 如果是操纵文本,我倒可以用一个bw.newLine()解决,但是是放进JTextArea(string)! 我想了下,没想到怎么办! 问: 1、如上这个问题,怎么解决? 2、或许我的思路就是错的,请教有经验的你,你会使用什么方式显示protocol呢?
  • 打赏
  • 举报
回复
weidu23 2013-02-13
引用 3 楼 valid25f 的回复:
你是不是从out.txt中每次用readLine读一行的时候,没有自己加一个换行"\n",JTextArea(string),你往这个string加"\n"试下
我突然明白了! thanks!
  • 打赏
  • 举报
回复
weidu23 2013-02-13
引用 3 楼 valid25f 的回复:
你是不是从out.txt中每次用readLine读一行的时候,没有自己加一个换行"\n",JTextArea(string),你往这个string加"\n"试下
你看看我这个string获取部分!获取全是null

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class StreamOperate {
	public static void main(String[] args) throws IOException {
		String	readPath	=	"F:\\RP.txt"	;
		String	writePath	=	"F:\\out.txt"	;
		FileReader	filereader	=	new	FileReader(readPath)	;
		BufferedReader	br	=	new	BufferedReader(filereader)	;
		FileWriter	filewriter	=	new	FileWriter(writePath)	;
		BufferedWriter	bw	=	new	BufferedWriter(filewriter)	;
		int	lineSum	=	0	;
		while(br.readLine()!= null){
			lineSum	++	;
		}
		System.out.println(lineSum);
		/*
		 * 为什么直接设置为lineSum	=	6就可以?
		 */
		String[]	strLine	=	new	String[lineSum]	;
		for(int i=0; i<lineSum; i++){
			strLine[i]	=	new	String();
		}
		for(int i=0; i<lineSum; i++){
			strLine[i]	=	br.readLine()	;//为什么这一步获取不了数据?而会是null
//			bw.write(strLine[i]);//因为上一步获取不了数据,为null,这一步为空指针异常
		}
		for(int	i=0; i<lineSum; i++){
			System.out.println(strLine[i]);
		}
		System.out.println(lineSum);
		br.close();
		bw.flush();
		bw.close();
	}
}
这是我担心代码出错,提前写的一个实验代码! 果然出错了
  • 打赏
  • 举报
回复
valid25f 2013-02-13
你是不是从out.txt中每次用readLine读一行的时候,没有自己加一个换行"\n",JTextArea(string),你往这个string加"\n"试下
  • 打赏
  • 举报
回复
valid25f 2013-02-12
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(); 
	  } 

}
  • 打赏
  • 举报
回复
相关推荐
发帖
Java SE
加入

6.2w+

社区成员

Java 2 Standard Edition
申请成为版主
帖子事件
创建了帖子
2013-02-12 06:38
社区公告
暂无公告