Java I/O(输入输出流)
Posted 王睿丶
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java I/O(输入输出流)相关的知识,希望对你有一定的参考价值。
文章目录
1、 创建文件的两种方式
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
/**
* 创建文件的两种方式
* @author wangrui
*
*/
public class Main1 {
public static void main(String[] args) {
/*
* △ 注意一:Linux 系统下:根目录从/开始,Windows则是从盘开始例如:C:
* △ 注意二:FileOutputStream 只是创建文件,这里指创建hello文件,若 /tmp/wangrui/ 缺少某个文件夹(tmp或wangrui都不行)或路径不对则都会抛出异常。
* */
//方式一:
try {
OutputStream f = new FileOutputStream("/tmp/wangrui/");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//方式二:
File f = new File("/tmp/wangrui/hello");
try {
OutputStream fOut = new FileOutputStream(f);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
2、读取文件的两种方式
/**
* 读取文件的两种方式
* @author wangrui
*
*/
public class Main2 {
public static void main(String[] args) {
//方式一:
try {
InputStream f1 = new FileInputStream("/tmp/wangrui/hello");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//方式二:
File f = new File("/tmp/wangrui/hello");
try {
InputStream f2 = new FileInputStream(f);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
3、InputStream 和 OutputStream 实战小例子
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
/**
* InputStream 和 OutputStream 实战小例子
* @author wangrui
*
*/
public class Main3 {
public static void main(String[] args) {
try {
byte bWrite[] = { 11, 21, 3, 40, 5 };
//创建输出流,若文件指定文件不存在会自动创建一个文件
OutputStream os = new FileOutputStream("/tmp/wangrui/test.txt");
//写入数据
for (int x = 0; x < bWrite.length; x++) {
os.write(bWrite[x]); // writes the bytes
}
//关闭资源
os.close();
//创建输入流
InputStream is = new FileInputStream("/tmp/wangrui/test.txt");
//获取大小
int size = is.available();
//读取
for (int i = 0; i < size; i++) {
System.out.print((char) is.read() + " ");
}
//关闭资源
is.close();
} catch (IOException e) {
System.out.print("Exception");
}
}
}
4、InputStream 和 OutputStream 实战小例子 二进制造成解决乱码问题
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
/**
* InputStream 和 OutputStream 实战小例子 二进制造成解决乱码问题
* @author wangrui
*
*/
public class Main4 {
public static void main(String[] args) throws IOException {
//构建FileOutputStream对象,文件不存在会自动新建
File f = new File("/tmp/wangrui/a.txt");
FileOutputStream fop = new FileOutputStream(f);
// 构建OutputStreamWriter对象,参数可以指定编码,默认为操作系统默认编码,windows上是gbk
OutputStreamWriter writer = new OutputStreamWriter(fop, "UTF-8");
// 写入到缓冲区
writer.append("中文输入");
// 换行
writer.append("\\r\\n");
// 刷新缓存冲,写入到文件,如果下面已经没有写入的内容了,直接close也会写入
writer.append("English");
// 关闭写入流,同时会把缓冲区内容写入文件,所以上面的注释掉
writer.close();
// 关闭输出流,释放系统资源
fop.close();
// 构建FileInputStream对象
FileInputStream fip = new FileInputStream(f);
// 构建InputStreamReader对象,编码与写入相同
InputStreamReader reader = new InputStreamReader(fip, "UTF-8");
//用 StringBuffer 拼接字符更高效,线程也更安全
StringBuffer sb = new StringBuffer();
while (reader.ready()) {
// 转成char加到StringBuffer对象中
sb.append((char) reader.read());
}
System.out.println(sb.toString());
// 关闭读取流
reader.close();
// 关闭输入流,释放系统资源
fip.close();
}
}
5、创建目录
import java.io.File;
/**
* 创建目录
* @author wangrui
*
*/
public class Main5 {
public static void main(String[] args) {
指定路径
String dirname = "/tmp/wangrui/java/bin";
//创建文件对象
File d = new File(dirname);
//创建一个文件夹和它的所有父文件夹
//d.mkdirs();
if(d.mkdir()) {
System.out.println("可以创建");
}else {
System.out.println("该文件已存在或指定路径还不存在,不可以创建");
}
}
}
6、读取目录
import java.io.File;
/**
* 读取目录
* @author wangrui
*
*/
public class Main6 {
public static void main(String[] args) {
//指定路径
String dirname = "/tmp";
//创建File 文件对象
File f = new File(dirname);
//判断该文件是否为目录
if(f.isDirectory()) {
System.out.println("目录:" + dirname);
//获取该目录下的所有文件和目录的文件名
String s[] = f.list();
for(int i=0;i<s.length;i++) {
//得到具体路径(文件、文件夹)
File f1 = new File(dirname + "/" + s[i]);
//判断该文件是否为目录
if(f1.isDirectory()) {
System.out.println(s[i] + "是一个目录");
}else {
System.out.println(s[i] + "是一个文件");
}
}
}else {
System.out.println("不是一个目录");
}
}
}
7、删除目录
import java.io.File;
/**
* 删除目录
* @author wangrui
*
*/
public class Main7 {
public static void main(String[] args) {
//创建文件对象
File folder = new File("/tmp/java/");
//删除目录
deleteFolder(folder);
}
//删除文件及目录
public static void deleteFolder(File folder) {
//listFiles是获取该目录下所有文件和目录的绝对路径
File[] files = folder.listFiles();
//△注意:使用 java.io.File.delete() ,需要注意的是当删除某一目录时,必须保证该目录下没有其他文件才能正确删除,否则将删除失败。
if(files != null) {
//获取每一个具体的File
for(File f:files) {
//判断该文件是否为目录
if(f.isDirectory()) {
deleteFolder(f); //是目录再重新走一遍流程-递归
}else {
f.delete(); //不是目录,就直接删除即可
}
}
}
folder.delete();
}
}
以上是关于Java I/O(输入输出流)的主要内容,如果未能解决你的问题,请参考以下文章