Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:我的文件输入/输出有一些问题(br无法解决)_Java_Bufferedreader_Bufferedwriter - Fatal编程技术网

Java:我的文件输入/输出有一些问题(br无法解决)

Java:我的文件输入/输出有一些问题(br无法解决),java,bufferedreader,bufferedwriter,Java,Bufferedreader,Bufferedwriter,我对Java比较陌生,所以我只是想尝试一些简单IO以及异常处理的实践。我的程序非常基本——我只想从一个文件中读取一个数字,然后将其从摄氏度转换为华氏度,并输出到另一个文件中。我得到的错误是:“br/bw无法解析”和“br/bw无法解析为变量”。这似乎是一个范围问题,但我不确定。我这样说是因为它们都是在我创建BufferedReader/BufferedWriter对象/变量之后发生的 谢谢你的关注 import java.io.*; import java.util.*; public cla

我对Java比较陌生,所以我只是想尝试一些简单IO以及异常处理的实践。我的程序非常基本——我只想从一个文件中读取一个数字,然后将其从摄氏度转换为华氏度,并输出到另一个文件中。我得到的错误是:“br/bw无法解析”和“br/bw无法解析为变量”。这似乎是一个范围问题,但我不确定。我这样说是因为它们都是在我创建BufferedReader/BufferedWriter对象/变量之后发生的

谢谢你的关注

import java.io.*;
import java.util.*;

public class InputOutputTest {

    public static void main (String [] args){

        String dataIn = "input.txt";
        String dataOut = "output.txt";

        try{
            BufferedReader br = new BufferedReader( new FileReader( dataIn ) );
        }

        catch(FileNotFoundException e){
            System.out.println("Cannot open " + dataIn);

        }

        try{
            BufferedWriter bw = new BufferedWriter(new FileWriter(dataOut));
        }

        catch(IOException e){
            System.out.println("Cannot open " + dataOut);
        }

        Scanner fileIn = new Scanner( br );

        try{
            while(fileIn.hasNext()){

                int cTemp = fileIn.nextInt();
                int fTemp = cTemp * (9/5) + 32;

                bw.write("The temperature " + cTemp + " in fahrenheit is " + fTemp);
            }
        }

        catch(IOException e){
            System.out.println("Error, problem writing to file.");
        }

        try{
            br.close();
            bw.close();
        }
        catch(IOException e){System.out.println("Error: Problem closing input or output file.");}
    }
}

由于您已在
try
块中声明了
br
变量,因此其范围仅限于该块

要增加
br
的范围,请在
try
块之前声明它

BufferedReader br = null;
try{
    br = new BufferedReader( new FileReader( dataIn ) );
}
您必须将它初始化为
null
,这样您就可以确保它在第一次被引用之前总是初始化为某个值(甚至
null


将来的引用在使用它之前需要检查它是否为
null

这是因为您在try块内声明了BufferedReader,所以在该块外它不可见。在Java中,作用域解析(由大括号括起来决定)决定对象的可见性。

bw和br的作用域在try块中。你可能想阅读范围界定规则来更好地理解这一点。是的,你是对的。我绝对应该抓住这个。尽管我是Java新手,但这是一个非常明显的范围问题。谢谢!这很有道理。