java判断文件为空

StringBuffer sb = new StringBuffer();
br = new BufferedReader(new FileReader(file));
while ((lineStr = br.readLine()) != null) {
int i = 0;
while (i <= lineStr.length() - 1) {
ch = lineStr.charAt(i);
if ( ch == dyh.charAt(0)) {
sb.append(ch);
while(ischaracter){
if(i==lineStr.length() - 1)
{
while((lineStr=br.readLine())!=null)//下一行不为空
{
break;
}
if(!br.ready())////////文件为空
{
System.out.print("错误类型:单引号不匹配" + " 第 " + a + " 行 , 第 " + b + " 列1");
i++;
ischaracter=false;
break;
}
}
else {
ch = lineStr.charAt(++i); //继续读取下一个字符
}

}
为什么程序运行进入不了if(!br.ready())语句,判断文件为空时是用这个语句吗?

看了下代码,有2个逻辑错误

     判断文件是否为空,使用readLine方法,如果返回null,表示为空

    ready()表示文件是否准备完毕


if(!br.ready()) ////////文件为空 

文件读入流后,一直处于准备中,因此程序不会进入if(!br.ready())语句


不清楚你的逻辑,只能部分修改你的代码,希望有帮助,代码和注释如下:

StringBuffer sb = new StringBuffer();
br = new BufferedReader(new FileReader(""));

while ((lineStr = br.readLine()) != null) { // 这里是第一次去,如:第1行
int i = 0;
while (i <= lineStr.length() - 1) {
ch = lineStr.charAt(i);
if (ch == dyh.charAt(0)) {
sb.append(ch);
while (ischaracter) {
if (i == lineStr.length() - 1) {

}
if ((lineStr = br.readLine()) != null) { // 文件不为空:这个时候读取了下一行,针对上去是第2行
if (lineStr.trim().length() == 0) { // 去除空格后,长度等于0,表示这是个一空行
// 这是一个空行,加入你的逻辑
} else {
// 这行有内容,加入你的逻辑
}
} else {
// 这里是文件为空
// 加入你的逻辑
}

}
}
}
}

追问

当第2行不为空时,我想返回while(ischaracter),即让他从第2行的第一个字符开始读取,到了第三行的最后一个字符,如果第4行不为空,则从第4行的第一个字符开始读取,直到文件结束,这个要怎么实现?

追答

把你对文件的整个操作说1遍,可以吗,这样理解不是很清楚
例如 ischaracter 、dyh 都不清楚代表什么

追问

1、先用readLine读取一行,再用ch读取这一行的每个字符
2、如果到了这一行的最后一个字符即(i==lineStr.length()-1)且下一行不为空,则ch从下一行的第一个字符继续读取,直到找到我想要的ch
3、如果到了文件最后一行的最后一个字符,还没找到我想要的ch,则输出错误。

追答

那你的逻辑又问题,读完一行后,不存在字符,就可以直接继续下次循环,不需要再一次循环中读2行


你的意思是,如果我有个字符A,读取文件1.txt,只要A在1.txt存在一个A,程序打出A在第几行第几列,不存在就报错?


稍后给你代码,先看看,应该很清楚了

public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new FileReader("E:\\1.txt"));
String ch = "A";
int row = 1, idx;
String lineStr;
// 一个循环
while ((lineStr = br.readLine()) != null) { // 读取一行,读完了循环==null,循环结束
if ((idx = lineStr.indexOf(ch)) > 0) {
System.out.println("字符[" + ch + "]在第" + row + "行第" + (idx + 1) + "列");
} else {
System.out.println("字符[" + ch + "]在第" + row + "行第不存在");
}
row++;
}
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-05-01
不是 用的是 file.isExits() 应该是这个追问

你可能没理解我的意思,我使用br.readline()一行一行读取文本,当读到最后一行时,他的下一行如果为空,则表示已经读取完文本,此时要怎么表示文本为空?

追答

额 这个时候 他返回的是-1 你就发现已经没有了

追问

所以说,请大神指点我一下,要怎么修改if(!br.ready())这个条件啊?

追答

br.read()!=-1

第2个回答  2014-05-01
(lineStr=br.readLine())!=-1

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网