OutputStream class 用于写入文件。这怎么可能?
OutputStream class is used for writing into files. How is it possible?
以下代码引用自:http://examples.javacodegeeks.com/core-java/io/fileoutputstream/java-io-fileoutputstream-example/
虽然OutputStream是一个抽象方法,但在下面的代码中,OutputStream对象用于写入文件。
Files.newOutputStream(文件路径)) returns 输出流。那么,out的类型是OutputStream,out引用了OutputStream。
OutputStream 是抽象的,这怎么可能class?
package com.javacodegeeks.core.io.outputstream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
public class FileOutputStreamExample {
private static final String OUTPUT_FILE = "C:\Users\nikos\Desktop\TestFiles\testFile.txt";
public static void main(String[] args) {
String content = "Hello Java Code Geeks";
byte[] bytes = content.getBytes();
Path filepath = Paths.get(OUTPUT_FILE);
try ( OutputStream out = Files.newOutputStream(filepath)) {
out.write(bytes);
} catch (IOException e) {
e.printStackTrace();
}
}
}
仅仅因为 声明的 类型是 OutputStream
,这并不意味着实现不会创建 具体[=] 的实例23=] OutputStream
的子 class。你总是在界面上看到这一点。例如:
public List<String> getList() {
return new ArrayList<String>();
}
基本上你需要区分公开的API(它使用抽象class)和实现(它可以选择使用它想要的任何子class)。
所以 Files.newOutputStream
可以实现为:
public static OutputStream newOutputStream(Path path)
throws IOException {
return new FileOutputStream(path.toFile());
}
以下代码引用自:http://examples.javacodegeeks.com/core-java/io/fileoutputstream/java-io-fileoutputstream-example/
虽然OutputStream是一个抽象方法,但在下面的代码中,OutputStream对象用于写入文件。
Files.newOutputStream(文件路径)) returns 输出流。那么,out的类型是OutputStream,out引用了OutputStream。
OutputStream 是抽象的,这怎么可能class?
package com.javacodegeeks.core.io.outputstream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
public class FileOutputStreamExample {
private static final String OUTPUT_FILE = "C:\Users\nikos\Desktop\TestFiles\testFile.txt";
public static void main(String[] args) {
String content = "Hello Java Code Geeks";
byte[] bytes = content.getBytes();
Path filepath = Paths.get(OUTPUT_FILE);
try ( OutputStream out = Files.newOutputStream(filepath)) {
out.write(bytes);
} catch (IOException e) {
e.printStackTrace();
}
}
}
仅仅因为 声明的 类型是 OutputStream
,这并不意味着实现不会创建 具体[=] 的实例23=] OutputStream
的子 class。你总是在界面上看到这一点。例如:
public List<String> getList() {
return new ArrayList<String>();
}
基本上你需要区分公开的API(它使用抽象class)和实现(它可以选择使用它想要的任何子class)。
所以 Files.newOutputStream
可以实现为:
public static OutputStream newOutputStream(Path path)
throws IOException {
return new FileOutputStream(path.toFile());
}