一、输入输出的概念
站在程序的角度上,从文件读取进来是输入,写入到文件、内存、控制台是输出
二、File类
1、File类的常用方法
File类文件创建,显示信息,删除如下
import java.io.File;
import java.io.IOException;
/*
* @Author:Qiutong
* @Date:2020/8/3
* @Description:创建文件,获取文件信息,删除文件
*/
public class FileDemo {
//创建文件
public void creatFile(File file){
if (!file.exists())
try {
file.createNewFile();
System.out.println("文件已创建!");
} catch (Exception e) {
e.printStackTrace();
}
}
//显示文件信息
public void showFile(File file){
if (file.exists()) {
if (file.isFile()) {
System.out.println("文件的名字为:" + file.getName());
System.out.println("文件的相对路径为:" + file.getPath());
System.out.println("文件的绝对路径为:" + file.getAbsolutePath());
System.out.println("文件的字节为:" + file.length() + "字节");
}
if (file.isDirectory()) {
System.out.println("是目录");
}
}else{
System.out.println("文件不存在!");
}
}
//删除文件
public void delete(File file){
if (file.exists()){
file.delete();
System.out.println("文件已删除!");
}
}
//Test
public static void main(String[] args) {
FileDemo fileDemo=new FileDemo();
File file=new File("e:/qiu/love.txt");
fileDemo.creatFile(file);
fileDemo.showFile(file);
}
三、流
通过流来读写文件
流是一组有序的数据序列
以先进先出的方式发送信息的通道
java流的分类
InputStream常用的方法
int read()
int read(byte[] b)
int read(byte[] b,int off,int len)
void close()
int available():可以读取的字节数目
子类FileInputStream常用的构造方法
FileInputStream(File file)文件
FileInputStream(String name)文件路径
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Arrays;
/*
* @Author:Qiutong
* @Date:2020/8/3
* @Description:
*/
public class TestFileInputStream {
public static void main(String[] args) throws IOException {
File file=new File("e:/青春.txt");
FileInputStream fis=new FileInputStream(file);
int tmp=-1;
while ((tmp=fis.read())!=-1){
System.out.print((char)tmp);
}
byte[] b=new byte[1024];
fis.read(b);
byte[] rst=null;
for (int i = 0; i < b.length; i++) {
if (b[i]==0){
rst= Arrays.copyOf(b,i);
break;
}
}
String str=new String(rst);
System.out.println(str);
}
public static String readFile(String path){
// File f=new File(path);
FileInputStream fis= null;
String str=null;
try {
fis=new FileInputStream(path);
byte[] b=new byte[1024];
byte[] rst=null;
for (int i = 0; i < b.length; i++) {
if (b[i]==0){
rst=Arrays.copyOf(b,i);
}
}
str=new String(rst);
} catch (FileNotFoundException e) {
e.printStackTrace();
}finally{
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return str;
}
//单字节
public static String readByOne(String path){
FileInputStream fis=null;//扩大作用域
String str=null;
try {
fis=new FileInputStream(path);
StringBuffer sb=new StringBuffer();
int tmp;
while((tmp=fis.read())!=-1){
char c=(char)tmp;
sb.append(c);
}
str=sb.toString();
} catch (FileNotFoundException e) {
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
finally {//即使try中发生了异常,也可以关闭数据流
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return str;
}
}
OutputStream常用的方法
int write(int c)
int write(byte[] buf)
int write(byte[] b,int off,int len)
void close()
int flush():强制把缓冲区的数据写到输入流中
子类FileInputStream常用的构造方法
FileOutputStream(File file)文件
FileOutputStream(String name)文件路径
FileOutputStream(String name,boolean append)
前两种会直接覆盖调原来的文件内容,boolean参数true是会直接在原内容的基础上追加
public class FileOutputStreamDemo {
public static void main(String[] args) {
FileOutputStream fos=null;
try {
fos=new FileOutputStream("e:/qiu/learn.txt",true);
String info="天天向上";
byte[] b=info.getBytes();
fos.write(b,0,b.length);
System.out.println("文件写入成功!");
} catch (FileNotFoundException e) {
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}finally {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
复制,从一个中读取同时写入到另一个
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
/*
* @Author:Qiutong
* @Date:2020/8/3
* @Description:复制文本文件
*/
public class Test2 {
public static void main(String[] args) {
FileInputStream fis=null;
FileOutputStream fos=null;
try {
fis=new FileInputStream("E:/我的青春谁做主.txt");
fos=new FileOutputStream("E:/qiu/test.txt");
byte[] words=new byte[1024];
int tmp=-1;
while((tmp=fis.read(words))!=-1){
fos.write(words,0,tmp);
}
System.out.println("文件已复制完成!");
} catch (FileNotFoundException e) {
e.printStackTrace();
}catch (IOException e){
e.printStackTrace();
}finally {
try {
fos.close();
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
晚安。