FileInputStream, FileOutputStream 用来真正操作文件

Reader, Writer 在操作文件时,还是使用 FileInputStream, FileOutputStream

FileInputStream(String name) 和 FileOutputStream(String name) 中的 name 都是 fullPath,因为这个构函进去后是这样的:

    public FileOutputStream(String name) throws FileNotFoundException {
	this(name != null ? new File(name) : null, false);
    }

    public FileOutputStream(File file, boolean append)
        throws FileNotFoundException
    {  //注意:file.getPath() 就是 fullPath
        String name = (file != null ? file.getPath() : null);
	SecurityManager security = System.getSecurityManager();
	if (security != null) {
	    security.checkWrite(name);
	}
        if (name == null) {
            throw new NullPointerException();
        }
	fd = new FileDescriptor();
        this.append = append;
	if (append) {
	    openAppend(name);
	} else {
	    open(name);
	}
    }

FileInputStream(作为输入源的文件)
If the named file 
1. does not exist(不存在)
2. is a directory rather than a regular file(存在,但,是个目录)
3. for some other reason cannot be opened for reading(无法打开)
then a FileNotFoundException is thrown.

FileOutputStream(接受写,被写)
If the file
1. exists but is a directory rather than a regular file(是个目录)
2. does not exist but cannot be created(无此文件,且无法创建此文件。隔着一个不存在的目录则无法创建,否则可以创建)
3. cannot be opened for any other reason(无法打开)
then a FileNotFoundException is thrown.

例如,存在下面的情况
C:/abc.txt(不存在 abc.txt)
C:/AFolder/abc.txt(不存在 AFolder/abc.txt,隔着一个不存在的目录
C:/Folder(已存在 文件夹 Folder)

FileInputStream
C:/abc.txt(不存在 abc.txt。这是输入源,隔不隔不存在的目录都一样,只要 不存在 就不行)
java.io.FileNotFoundException: C:\abc.txt (系统找不到指定的文件。)

C:/AFolder/abc.txt(不存在 AFolder/abc.txt。这是输入源,隔不隔不存在的目录都一样,只要 不存在 就不行)
java.io.FileNotFoundException: C:\AFolder\abc.txt (系统找不到指定的路径。)

C:/Folder(已存在 文件夹 Folder)
java.io.FileNotFoundException: C:\Folder (拒绝访问。)


FileOutputStream
C:/abc.txt(不存在 abc.txt)
可以成功(因为Parent Folder已经存在了,abc.txt是否存在无所谓。不隔着不存在的目录,就可以创建成功)

C:/AFolder/abc.txt(不存在 AFolder/abc.txt,隔着一个不存在的目录。  隔着一个不存在的目录则无法创建)
java.io.FileNotFoundException: C:\AFolder\abc.txt (系统找不到指定的路径。)  隔着一个不存在的目录则无法创建

C:/Folder(已存在 文件夹 Folder)
java.io.FileNotFoundException: C:\Folder (拒绝访问。)

你可能感兴趣的:(c,String,File,Security,null)