字节流(byte stream)
含边界数据的连续流
字节流是由字节组成的,字符流是由字符组成的,Java里字符由两个字节组成.字节流是最基本的,所有的InputStream和OutputStream的子类都是,主要用在处理二进制数据,它是按字节来处理的但实际中很多的数据是文本,又提出了字符流的概念,它是按虚拟机的encode来处理,也就是要进行字符集的转化。在从字节流转化为字符流时,实际上就是byte[]转化为String。
输入流:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class FileInputDemo {
public static void main(String[] args) {
File f=new File("D:\\a.txt");
StringBuffer sb=new StringBuffer();
FileInputStream fis=null;
try {
fis=new FileInputStream(f);
byte b[]=new byte[1024];
int len=0;
try {
while ((len=fis.read(b))>0) {
sb.append(new String(b,0,len));
}
} catch (IOException e) {
e.printStackTrace();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
finally{
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
System.out.println(sb.toString());
}
}
输出流:
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Scanner;
public class FileOutputDemo {
public static void main(String[] args) {
File file=new File("D:\\a.txt");
FileOutputStream fos=null;
try {
fos = new FileOutputStream(file);
Scanner sc=new Scanner(System.in);
System.out.println("请输入十句话:");
for (int i = 0; i < 10; i++) {
String st=sc.next();
fos.write(st.getBytes());
fos.write('\r');
fos.write('\n');
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
finally{
if (fos!=null) {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
文件复制:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileCopy {
public static void main(String[] args) {
File source=new File("C:\\Users\\mbdn\\Desktop\\原本.txt");
File dest=new File("D:\\复印本.txt");
FileInputStream fis=null;
FileOutputStream fos=null;
try {
fis=new FileInputStream(source);
fos=new FileOutputStream(dest);
byte b[]=new byte[1024];
int len=0;
while ((len=fis.read(b))>0) {
fos.write(b, 0, len);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
finally{
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
import java.io.File;
练习1:
//1.输出某个文件夹下的文件名(包含文件路径)和文件夹名,不包含子文件夹下的内容()
public class Test1 {
public static void main(String[] args) {
File file=new File("G:\\电视剧\\");
File[]f=file.listFiles();
for (File file2 : f) {
System.out.println(file2.getPath());
System.out.println(file2.getName());
}
}
}
练习2
import java.io.File;
//2.在控制台打出一个文件夹里面所有的文件名和文件夹名。(使用递归,选做)
public class Test2 {
public static void main(String[] args) {
File file=new File("G:\\电视剧\\");
getName(file);
}
public static void getName(File file) {
File[] files=file.listFiles();
for (File f : files) {
if (f.isFile()) {
f.getName();
}
if (f.isDirectory()) {
getName(f);
f.getName();
}
System.out.println(f.getName());
}
}
}
练习3:
import java.io.File;
import java.io.FileNotFoundException;
//3.删除一个文件夹下所有的子文件和子目录(使用递归,选做)
public class Test3 {
public static void main(String[] args) throws FileNotFoundException {
File file=new File("D:\\新建文件夹");
getDelete(file);
System.out.println(getDelete(file));
}
public static String getDelete(File file) throws FileNotFoundException {
if (file.isFile()) {
long len=0;
File[] files=file.listFiles();
for (File f : files) {
if (f.isFile()) {
f.delete();
}
if (f.isDirectory()) {
getDelete(f);
f.delete();
}
}
return "文件已删除!";
}
else {
return "文件不存在!";
}
}
}