文件(File)和IO,流(Stream)
- Java.io 包几乎包含了所有操作输入、输出需要的类。所有这些流类代表了输入源和输出目标。
- Java.io 包中的流支持很多种格式,比如:基本类型、对象、本地化字符集等等。
- 一个流可以理解为一个数据的序列。输入流表示从一个源读取数据,输出流表示向一个目标写数据。
- Java 为 I/O 提供了强大的而灵活的支持,使其更广泛地应用到文件传输和网络编程中。
- 但本节讲述最基本的和流与 I/O 相关的功能。我们将通过一个个例子来学习这些功能。
读取控制台输入
Java 的控制台输入由 System.in 完成。
为了获得一个绑定到控制台的字符流,你可以把 System.in 包装在一个 BufferedReader 对象中来创建一个字符流。
下面是创建 BufferedReader 的基本语法:
BufferedReader br = new BufferedReader(new
InputStreamReader(System.in));
字节流(无缓冲)
InputStream 子类 FileInputStream 输入流
OutputStream 子类 FileOutputStream 输出流
public static void main(String[] args) {
FileInputStream fis = null;
FileOutputStream fos = null;
try {
fis = new FileInputStream(new File("D:\\autumn\\Pictures\\Camera Roll\\1.jpg"));
fos = new FileOutputStream(new File("D:\\autumn\\Pictures\\Camera Roll\\003.jpg"));
byte[] bytes = new byte[1024];
int length = 0;
try {
while ((length = fis.read(bytes))!=-1){
fos.write(bytes,0,length);
}
} catch (IOException e) {
e.printStackTrace();
}
} catch (FileNotFoundException e) {
System.out.println(e.getMessage());
} finally {
try {
fos.close();
fis.close();
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
}
字节流(缓冲)
new BufferedInputStream( new FileInputStream( new File(“url”) ) ); 输入流带缓冲
new BufferedOutputStream( new FileOutputStream( new File(“url”) ) ); 输出流带缓冲
public static void main(String[] args) {
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
bis = new BufferedInputStream(new FileInputStream(new File("D:\\autumn\\Pictures\\Camera Roll\\1.jpg")));
bos = new BufferedOutputStream(new FileOutputStream(new File("D:\\autumn\\Pictures\\Camera Roll\\2.jpg")));
byte[] bytes = new byte[1024];
int length = 0;
try {
while ((length = bis.read(bytes))!=-1){
bos.write(bytes,0,length);
}
} catch (IOException e) {
e.printStackTrace();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}finally {
try {
bis.close();
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
字符流
new BufferedReader(new FileReader(new File(“url”))); BufferedReader是Read的子类—>输入流
new BufferedWriter(new FileWriter(new File(“url”))); BufferedWriter是Writer的子类—>输出流
public static void main(String[] args) {
BufferedReader br = null;
BufferedWriter bw = null;
try {
br = new BufferedReader(new FileReader(new File("D:\\autumn\\Pictures\\Camera Roll\\1.txt")));
bw = new BufferedWriter(new FileWriter(new File("D:\\autumn\\Pictures\\Camera Roll\\2.txt")));
String str = null;
while ((str=br.readLine())!=null){
bw.write(str);
bw.newLine();
}
bw.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
br.close();
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
字节流转字符流
new BufferedReader(new InputStreamReader(System.in)); 字节流转字符流,System.in控制台输入
public static void main(String[] args) {
BufferedReader br = null;
BufferedWriter bw = null;
try {
br = new BufferedReader(new InputStreamReader(System.in));
bw = new BufferedWriter(new FileWriter(new File("D:\\autumn\\Pictures\\Camera Roll\\001.txt")));
String str = null;
while ((str=br.readLine())!=null){
if (str.equals("end")){
break;
}
bw.write(str);
bw.newLine();
}
bw.flush();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
br.close();
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
获取系统编码
public static void main(String[] args) {
System.out.println(System.getProperty("file.encoding"));
}