import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.FileNotFoundException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
public class WriteAString{
public static void main(String[]args){
String phrase = new String("Garbage in, garbage out\n");
String dirname = "C:/Beg Java Stuff";
String filename= "charDate.txt";
File dir = new File(dirname);
if(!dir.exists()){

if(!dir.mkdir()){
System.out.println("Cannot create directory: "+dirname);
System.exit(1);
}
}else if (!dir.isDirectory()){
System.err.println(dirname+" is not a directory");
System.exit(1);
} File aFile=new File(dir,filename);
FileOutputStream outputFile = null;
try{
outputFile = new FileOutputStream(aFile);
System.out.println("File stream created successfully.");
}catch(FileNotFoundException e){
e.printStackTrace(System.err);
}
FileChannel outChannel=outputFile.getChannel();
ByteBuffer buf = ByteBuffer.allocate(1024);
System.out.println("New buffer: position = "+buf.position()+"\tLimit = "+buf.limit()+"\tcapacity = "+buf.capacity());
for(char ch:phrase.toCharArray()){
buf.putChar(ch);
} System.out.println("Buffer after loading:position = "+buf.position()+"\tLimit ="+buf.limit()+"\tcapacity = "+buf.capacity()); buf.flip();
System.out.println("Buffer after flip: position = "+buf.position()+"\tLimit ="+buf.limit()+"\tcapacity = "+buf.capacity());
try{
outChannel.write(buf);
outputFile.close();
System.out.println("Buffer contents written to file.");
}catch(IOException e){
e.printStackTrace(System.err);
}
System.exit(0);
}
}运行程序后,程序会在C盘的Beg Java Stuff文件夹下面创建一个charDate.txt
我想问一下,这个文本文件是程序中的哪一条语句创建的

解决方案 »

  1.   

    File aFile=new File(dir,filename);
    创建文件是这句
      

  2.   


    绝对不是这一句创建的,因为File类有一个方法叫做exists来判断文件是否存在,如果new就存在的话,那就不用判断了,那个文件一定存在了。
    File类有一个CreateFile方法来创建一个空文件。
    这个地方的文件应该是FileOutputStream.<init>方法创建的。
      

  3.   

    其实上面的两位说得都有道理,但第二位说得更全面一些,在java程序中,不能断章取义,要从整个程序出发。做到精确,安全性!
      

  4.   

    outputFile = new FileOutputStream(aFile);
    当发现aFile 不存在则新建,存在则覆盖。
      

  5.   

    你可以查看JDK看一看API的文档
    也可以在
    File aFile=new File(dir,filename);
    这一行打一个断点DEBUG一下,这样你会发现
    在这条语句执行之后,并没有创建charDate.txt 这个文本文件,
    而是在outputFile = new FileOutputStream(aFile);
    这条语句执行完之后才建立的飞过~~
      

  6.   

    File aFile=new File(dir,filename);
    其实并没有生成文件。
    只是创建了一个新的File实例。
    如果要真正的生成文件,
    可以调用createNewFile();方法。在现在的代码中,
    outputFile = new FileOutputStream(aFile);可以生成一个文件,
    因为这条语句会创建一个对象表示对此文件的连接。而且还会继续判断此文件的是否文普通文件或是否只读等。