public class FileStream
{
public static void main(String[] args)
{
try
{
FileOutputStream out=new FileOutputStream("afile.txt");
}
catch(Exception e)
{
System.out.println("out can't be created");
e.printStackTrace();
}
try
{ String str=new String("this is an example for FileOutputStream and FileInputStream");
out.write(str.getBytes());
}
catch(Exception e)
{
System.out.println("out.write is error");
e.printStackTrace();
}
try
{
out.close();
}
catch(Exception e)
{
System.out.println("file can't be closed");
e.printStackTrace();
}
File f=new File("afile.txt");
FileInputStream in=new FileInputStream(f);
对于上面的一段程序,在cmd下生成字节码文件时,出错
D:\JAVAWO~1\LEFBA9~1>javac FileStream.java
FileStream.java:17: 错误: 找不到符号
out.write(str.getBytes());
^
符号: 变量 out
位置: 类 FileStream
FileStream.java:26: 错误: 找不到符号
out.close();
^
符号: 变量 out
位置: 类 FileStream
如果将第一个try catch 语句注释掉,在main()方法后抛出异常throws Exception,则可以生成字节码文件,并可以正常运行 即改为
import java.io.*;
public class FileStream
{
public static void main(String[] args) throws Exception
{
//try
//{
FileOutputStream out=new FileOutputStream("afile.txt");
//}
//catch(Exception e)
//{
//System.out.println("out can't be created");
//e.printStackTrace();
//}
try
{ String str=new String("this is an example for FileOutputStream and FileInputStream");
out.write(str.getBytes());
}
catch(Exception e)
{
System.out.println("out.write is error");
e.printStackTrace();
}
try
{
out.close();
}
catch(Exception e)
{
System.out.println("file can't be closed");
e.printStackTrace();
}
File f=new File("afile.txt");
FileInputStream in=new FileInputStream(f);
byte[] buf=new byte[1024];
int len=0;
len=in.read(buf);
in.close();
System.out.println("文件afile中的内容是: "+new String(buf,0,len));
难道是第一个try catch 语句屏蔽了FileOutputStream 类的out对象,使下面在引用out时发生找不到符号的错误?