1、输入流:数据流向数据源到程序(以InputStream,Reader结尾的流)
2、输出流:数据流向是程序到目的地,(以OutputStream,write结尾的流)
存在盘符,绝对路径
不存在盘符,相对路径,相对于当前目录(System.getProperties(“user.dir”))
File file = new File("E:/a.txt");
File file1 = new File("e:/", "b.txt");
boolean flag = file.createNewFile();//是否创建成功
System.out.println(file.canRead());
System.out.println(file.canWrite());
file.exists();
File file1 = new File("e:/电影/华语");
boolean mkdir = file1.mkdir();//如果目录中中间某层不存在,则创建失败
boolean mkdir = file1.mkdirs();//如果目录中某层不存在,则会自动创建出来
file.isFile();
file1.isDirectory();
file.delete();
System.out.println(file.length());
System.out.println(file1.length());//如果是文件的话,返回为0
System.out.println(file.getPath());//如果创建的时候是以绝对路径创建的,则返回绝对路径,如果是相对路径创建的话,返回相对路径
System.out.println(file.getAbsolutePath());
System.out.println(file.getParent()); //得到的是文件的父目录
System.out.println(file.getParentFile()); //得到的是文件父目录对象,是一个file对象
String[] list = file.list();//返回目录下所有的目录名和文件名
File[] files = file.listFiles();//返回目录下所有的目录对象和文件对象
//递归打印子孙级目录和文件名
public static void printFile(File file,int level){
for (int i=0;i<level;i++){
System.out.print("-");
}
System.out.println(file.getName());
if (file.isDirectory()){
File[] files = file.listFiles();
for (File file1 : files) {
printFile(file1,level+1);
}
}
}
public static Long len=0l;
public static void count(File file){
if(null!=file&&file.exists()){
if(file.isFile()){
len+=file.length();
}else{//是文件夹的,遍历子孙
File[] files = file.listFiles();
for (File file1 : files) {
count(file1);
}
}
}
}
String msg="问题集合";
//编码
byte[] bytes = msg.getBytes();//默认使用工程的字符集,UTF-8,一个中文3个字节
System.out.println(bytes.length);//12
//编码:其他字符集
byte[] gbks = msg.getBytes("GBK");//GBK编码一个中文2个字节,一个英文一个字节
System.out.println(gbks.length);
//解码
String s = new String(bytes, 0, bytes.length);
System.out.println(s);
//乱码问题
1、字节数不够
2、编码解码字符集不统一
System.out.println(new String(bytes, 0, bytes.length - 2));//问题集�
System.out.println(new String(bytes, 0, bytes.length, "GBK"));//闂闆嗗悎
创建源
选择流
操作
释放资源
//创建源
File file = new File("src/abc.txt");
//选择流
InputStream is = null;
try {
is = new FileInputStream(file);
//操作
int data;
while((data=is.read())!=-1){ //当读不到时返回-1
System.out.println((char) data);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
//释放资源
if(null!=is){
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
//创建源
File file = new File("src/abc.txt");
//选择流
InputStream is=null;
try {
is=new FileInputStream(file);
//操作
byte[] bytes = new byte[1024];
int len=-1;//读取到的实际大小
while((len=is.read(bytes))!=-1){ //先读到byte[]中
String s = new String(bytes); //解码
System.out.println(s);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
if(null!=is){
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
//创建源
File file=new File("src/dest.txt");
//选择流
OutputStream os=null;
try {
os=new FileOutputStream(file);
//操作
String msg="我们相拥岁月,安暖人生";
//编码
byte[] bytes = msg.getBytes();
try {
os.write(bytes,0,bytes.length);
} catch (IOException e) {
e.printStackTrace();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}finally {
//释放资源
if(null!=os){
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 文件复制
* @param srcPath 源文件路径
* @param destPath 目标文件路径
*/
public static void copy(String srcPath,String destPath){
//创建源
File src = new File(srcPath);
File dest = new File(destPath);
//选择流
InputStream is=null;
OutputStream os=null;
try {
is = new FileInputStream(src);
os=new FileOutputStream(dest);
/*操作*/
byte[] flush=new byte[1024];
int len=-1;
while((len=is.read(flush))!=-1){ //先读取到缓冲字节数组中
os.write(flush,0,len);
os.flush();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
//分别关闭,先打开的先关闭
if(null!=is){
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(null!=os){
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
//创建源
File file = new File("src/dest.txt");
//选择流
Reader reader=null;
try {
reader=new FileReader(file);
char[] flush=new char[1024];
int len=-1;
while((len=reader.read(flush))!=-1){
System.out.println(flush);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if(null!=reader){
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
//创建源
File file=new File("src/dest.txt");
//选择流
Writer writer=null;
try {
writer=new FileWriter(file);
//操作
//第一种,写出字符数组
String msg="人生是一场旅途,谁都是过客";
/*char[] chars=msg.toCharArray();
writer.write(chars);*/
//第二种,写出字符串
writer.write(msg);
//第三种
writer.append("我们相拥岁月,安暖人生").append("dsdsdsdsds");
writer.flush();
} catch (IOException e) {e.printStackTrace();
}finally {
//释放资源
if(writer!=null){
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
源头由原来的文件变为字节数组,任何文件都可以转为字节数组,字节数组不能太大,不用关闭,不用使用多态。跟电脑内存打交道
//创建源,源头为字节数组,不要太大
byte[] bytes="Process finished with exit code 0".getBytes();
//选择流
ByteArrayInputStream bais=new ByteArrayInputStream(bytes);
//操作
try {
byte[] flush=new byte[1024];
int len=-1;
while((len=bais.read(flush))!=-1){
String s = new String(flush, 0, len);
System.out.println(s);
}
} catch (IOException e) {
e.printStackTrace();
}
//创建源,不需要源头
//选择流
ByteArrayOutputStream baos=null;
baos=new ByteArrayOutputStream();
//操作
String msg="Process finished with exit code 0";
byte[] bytes = msg.getBytes();//编码
baos.write(bytes,0,bytes.length);
try {
baos.flush();
//获取数据
byte[] bytes1 = baos.toByteArray();
System.out.println(new String(bytes1, 0, bytes1.length));
} catch (IOException e) {
e.printStackTrace();
}finally{
//不需要关闭
}
//字节数组到程序再到文件
public static void byteArrayToFile(byte[] bytes,String destPath){
//创建源
File file = new File(destPath);
ByteArrayInputStream bais=null;
OutputStream os=null;
try {
bais=new ByteArrayInputStream(bytes);
os=new FileOutputStream(file);
byte[] flush=new byte[1024];
int len=-1;
while((len=bais.read(flush))!=-1){
os.write(flush,0,len);
}
os.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
finally {
if(os!=null){
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
//图片到字节数组
public static byte[] fileToByteArray(String srcPath){
//创建源(文件字节输入流的)
File file = new File(srcPath);
//选择流
InputStream is=null;
ByteArrayOutputStream baos=null;
try {
is=new FileInputStream(file);
baos=new ByteArrayOutputStream();
byte[] flush=new byte[1024];
int len=-1;
while((len=is.read(flush))!=-1){
baos.write(flush,0,len);
}
baos.flush();
byte[] bytes = baos.toByteArray();
return bytes;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
//关闭文件字节输入流
if(is!=null){
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return null;
}