java中有关文件流的操作

文件流: 顾名思义,程序和文件打交道.

此时我们谈及的文件,值得是纯文本文件(txt的,不要使用Word,Excel),


在字节流中,暂时不要使用中文.
FileInputStream: 文件的字节输入流
FileOutputStream: 文件的字节输出流
FileReader:文件的字符输入流
FileWriter:文件的字符输出流

文件字符流:

文件的字节流:
FileInputStream:
FileOutputStream:

使用字节流操作汉字或特殊的符号语言的时候,容易乱码,建议使用字符流.
先有字节流,后有字符流,字符流是对字节流的补充.

使用记事本打开某个文件,可以看到内容的就是文本文件,否则可以理解二进制.
一般的,操作二进制文件(图片,音频,视频等)必须使用字节流.
一般的,操作文本文件使用字符流.
如果不清楚是哪一类型文件,使用字节流.

文件的字符流:
FileReader:
FileWriter:

代码:

文件字节输入流:

    public static void main(String[] args) throws IOException {File file = new File("file/stream.txt");InputStream in =new FileInputStream(file);File fileCopy = new File("file/streamCopy.txt");OutputStream out = new FileOutputStream(fileCopy);//System.out.println(in.read());
/*      int read 读取一个字节,返回读取的字节int read(byte[] b)读取多个字节,并存储到数组中int read(byte[] b, int off, int len) */byte[] b = new byte[11];
/*      *      输出文件内容方式一*      in.read(b);String str = new String(b);System.out.println(str);*///System.out.println(Arrays.toString(b));打印结果为Unicode编码//输出文件内容方式二int len = -1;//-1表示文件读取到最后while((len = in.read(b))!=-1){String str = new String(b,0,len);//文件拷贝out.write(b,0,len);System.out.println(str);}in.close();}

文件字节输出流:

    public static void main(String[] args) throws Exception {//文件可以帮我创建但是目录不能够帮我们创建,点解file文件夹refresh刷新file文件夹File file = new File("file/stream.txt");//如果文件不存在会自动创建刷新项目文件可以看见出现该文件了//获取FileOutputStream文件输出流对象,false表示不追加,true向文件中追加内容OutputStream out = new FileOutputStream(file,false);//在write方法中传入的参数为int或者是Byte如果传入的是int常量为65则转为Aout.write("hello java!".getBytes());
/*      write(int b);把一个字节写出到文件中write(byte[] b, int off, int len);从b数组中的第off位置开始向文件中写入len位数字*/out.close();}
}

文件字符输出流:

package IO;import java.io.File;
import java.io.FileReader;
import java.io.Reader;public class CharReaderDemo {public static void main(String[] args) throws Exception {//获取源文件File file = new File("file/aaa.txt");//获取流对象Reader reader = new FileReader(file);int len = -1;//每次只能读取5个字符char[] cnt = new char[5];while((len = reader.read(cnt)) != -1){System.out.println(cnt);}}
}

文件字符输入流:

package IO;import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;public class CharWriteDemo {public static void main(String[] args) throws IOException {File file = new File("file/aaa.txt");//如果想追加内容设为true,否则或者默认为falseWriter out = new FileWriter(file,true);String str = "我是新添加的字符串";char[] c= str.toCharArray();out.write(c);out.close();}
}

文件拷贝操作和资源的正确关闭:

文件拷贝:

package IO;import java.io.File;
import java.io.FileFilter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FilenameFilter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;public class FileCopy {public static void main(String[] args) throws IOException {//获取源File srcfile = new File("file"); File[] files = srcfile.listFiles(new FilenameFilter() {@Overridepublic boolean accept(File dir, String name) {return (new File(dir,name).isFile()&&name.endsWith(".txt"));}});File newFile = new File("new/copyFile.txt");OutputStream out = new FileOutputStream(newFile,true);System.out.println("------------写入操作---------------");for (File file : files) {System.out.println("文件名"+file.getName());InputStream in  = new FileInputStream(file);int len = -1;byte[] b = new byte[10];len = in.read(b);while(len != -1){String fileContent = new String(b);System.out.println("文件内容"+fileContent+"有效长度"+len);out.write(b, 0, len);len = in.read(b);}in.close();}InputStream in1 = new FileInputStream(newFile);int len = -1;byte[] B = new byte[1024];System.out.println("----------输出拷贝后的文件内容-----------------");while((len = in1.read(B)) != -1){String str = new String(B);System.out.println(str);}in1.close();out.close();}
}

资源的正确关闭:
这里写图片描述

文件字节流使用案例:
案例1:文件拷贝案例-拷贝指定目录的指定类型文件到指定目录.
分析: 比如把C:/java目录中所有的java文件拷贝到D:/text/把拷贝的所有文件的拓展名改为.txt.
这里写图片描述
案例2:获取进程数据-编译和运行Java代码.

package IO;import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;public class dynamicCompile {public static void main(String[] args) throws IOException {String str = "System.out.println(\"hello word!\")";exec(str);}static void exec(String str) throws IOException{//1.获取源文件File file = new File("file/Hello.java");//2.拼接一个完整的程序StringBuilder sb = new StringBuilder();sb.append("public class Hello {");sb.append("public static void main(String [] args) {").append(str).append(";").append("}}");//3.保存到hello.java文件中OutputStream out = new FileOutputStream(file);byte[] b = new byte[100];out.write(sb.toString().getBytes());out.close();//4.读取javac进程来编译hello.javaString command = "javac Hello.java";Process javacProcess = Runtime.getRuntime().exec(command);//5.读取javac进程中的错误流信息InputStream error = javacProcess.getErrorStream();//6. 读取流中的数据byte[] buffer = new byte[1024];int len = -1;while((len = error.read(buffer)) != -1){String msg = new String(buffer, 0, len);System.out.println(msg);}error.close();//7.调用java进程来运行hello.classProcess javaProcess = Runtime.getRuntime().exec("java Hello");//8.读取进程中的流信息InputStream info = javaProcess.getInputStream();while((len = info.read(buffer)) !=-1){String msg = new String(buffer, 0, len);System.out.println(msg);}info.close();//9.删除java和class文件file.delete();}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/509593.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构实验之二叉树一:树的同构

题目描述 给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是“同构”的。例如图1给出的两棵树就是同构的,因为我们把其中一棵树的结点A、B、G的左右孩子互换后,就得到另外一棵树。而图2就不是同构的。 图1 …

Linxu服务器文件双向同步 rsync+sersync 详细讲解

文章目录Linxu服务器文件双向同步 rsyncsersync基础信息安装rsync安装配置根据配置文件创建相应的目录、文件、防火墙规则创建需要同步的目录创建同步用户防火墙启动rsyncd服务测试异常处理sersync安装sersync配置test21配置test22配置sersync启动test21启动test22启动测试新增…

resize和reverse的区别

首先,两个函数的功能是有区别的: reserve是容器预留空间,但并不真正创建元素对象,在创建对象之前,不能引用容器内的元素,因此当加入新的元素时,需要用push_back()/insert()函数。 resize是…

数据结构实验之二叉树五:层序遍历

题目描述 已知一个按先序输入的字符序列&#xff0c;如abd,,eg,,,cf,,,(其中,表示空结点)。请建立二叉树并求二叉树的层次遍历序列。 输入 输入数据有多行&#xff0c;第一行是一个整数t (t<1000)&#xff0c;代表有t行测试数据。每行是一个长度小于50个字符的字符串。输出 …

java中字符编码详解

字符编码的发展历程: 阶段1: 计算机只认识数字,我们在计算机里一切数据都是以数字来表示,因为英文符号有限, 所以规定使用的字节的最高位是0.每一个字节都是以0~127之间的数字来表示,比如A对应65,a对应97. 这就是美国标准信息交换码-ASCII. 阶段2: 随着计算机在全球的普及…

Elasticsearch Pipeline 详解

文章目录Ingest Node简介 Ingest Node简介 Pipeline、ProcessorsPipeline 定义简介 Simulate Pipeline API访问 Pipeline 中的内容Processors 类型详解Append ProcessorConvert ProcessorDate ProcessorDate Index Name ProcessorFail ProcessorForeach ProcessorGrok Processo…

java中的包装流和缓冲流概述

处理流/包装流(相对于节点流更高级)装饰设计模式/包装模式: 1:隐藏了底层的节点流的差异,并对外提供了更方便的输入/输出功能,让我们只关心高级流的操作. 2:使用处理流包装了节点流,程序直接操作处理流,让节点流与底层的设备做IO操作. 3:只需要关闭处理流即可. 包装流如何区…

数据结构实验之二叉树七:叶子问题

题目描述 已知一个按先序输入的字符序列&#xff0c;如abd,,eg,,,cf,,,(其中,表示空结点)。请建立该二叉树并按从上到下从左到右的顺序输出该二叉树的所有叶子结点。 输入 输入数据有多行&#xff0c;每一行是一个长度小于50个字符的字符串。输出 按从上到下从左到右的顺序输出…

vi/vim 光标移动命令

移动光标 上:k nk:向上移动n行 9999k或gg可以移到第一行 G移到最后一行 下:j nj:向下移动n行 左:h nh:向左移动n列 右:l nl:向右移动n列 w&#xff1a;光标以单词向前移动 nw&#xff1a;光标向前移动n个单词 光标到单词的第一个字母上 b&#xff1a;与w相反 e: 光标以单词向前…

CentOS离线安装httpd服务

文章目录需求背景安装需求背景 需要在无网络环境下安装httpd服务 安装 提示&#xff1a;直接下载httpd离线安装包无法安装成功&#xff0c;需要安装相对应的依赖 需要下载的依赖如下&#xff1a; apr-1.4.8-5.el7.x86_64.rpm apr-util-1.5.2-6.el7.x86_64.rpm apr-util-lda…

转换流和内存流

转换流:把字节流转成字符流: InputStreamReader:把字节输入流转成字符输入流. OutputStreamWriter:把字节输出流转成字符输出流. 为什么有字节转字符流,没有字符转字节流. 字节流可以操作一切文件(纯文本文件/二进制文件).字符流是用来操作中文纯文本使用的,本身是对字节流的…

windows配置gvim高效率编程(cc++)带自动补全代码

对vim的配置足以处理一般的比赛获其他编程项目要求&#xff0c;如自动缩进&#xff0c;自动补全等等。先上几张截图&#xff0c;看看效果&#xff1a; 可以看见vim简洁高效的界面和不错的缩进功能。 debug功能 一、安装gvim 下载资源并安装 百度云下载网址http://pan.baid…

数据结构实验之二叉树四:还原二叉树

题目描述 给定一棵二叉树的先序遍历序列和中序遍历序列&#xff0c;要求计算该二叉树的高度。 输入 输入数据有多组&#xff0c;每组数据第一行输入1个正整数N(1 < N < 50)为树中结点总数&#xff0c;随后2行先后给出先序和中序遍历序列&#xff0c;均是长度为N的不包含重…

Flink 1.12 CDH 6.3 集成

之前记录的&#xff1a;Flink 1.9 CDH 6.3 集成 有些下载链接可能被官方关闭了&#xff0c;这里介绍1.12版本集成&#xff0c;并把安装包下载地址换为百度网盘链接 下载安装包 链接: https://pan.baidu.com/s/112fiaaMAMMXMsyiTDh3qjg 提取码: ar5f 安装包内容 FLINK-1.12…

合并流

合并流/顺序流(SequenceInputStream): 就是把多个输入流,合并成一个流对象.

gvim常用的配置及插件 -windows

gvim常用的配置及插件 接触vim也已经有一年多了&#xff0c;期间也用过一段时间的SourceInsight&#xff0c;SourceInsight是Windows下一款不错的查看代码的软件。利用它可以迅速的了解一个大型程序的结构。后来在Linux下进行了一段时间的程序开发&#xff0c;就回到vim上了,经…

数据结构实验之求二叉树后序遍历和层次遍历

题目描述 已知一棵二叉树的前序遍历和中序遍历&#xff0c;求二叉树的后序遍历。输入 输入数据有多组&#xff0c;第一行是一个整数t (t<1000)&#xff0c;代表有t组测试数据。每组包括两个长度小于50 的字符串&#xff0c;第一个字符串表示二叉树的先序遍历序列&#xff0c…

CDH 6 安装服务哈希验证失败 解决方法

当安装cdh 6&#xff0c;使用本地搭建的parcel时&#xff0c;出现了哈希验证失败的问题&#xff1a; 查看了parcel的sha值&#xff0c;与官网的一致&#xff0c;没有问题&#xff1a; #parcel sha值 [rootlocalhost bigdata]# sha1sum CDH-6.0.0-1.cdh6.0.0.p0.537114-el7.pa…

Arrays.sort()用来自定义排序的使用

compareTo方法 public int compareTo(String anotherString)按字典顺序比较两个字符串。该比较基于字符串中各个字符的 Unicode 值。按字典顺序将此 String 对象表示的字符序列与参数字符串所表示的字符序列进行比较。如果按字典顺序此 String 对象位于参数字符串之前&#xf…

gvim配置

手把手教你把Vim改装成一个IDE编程环境(图文) By:吴垠Date:2007-09-07Version:0.5Email:lazy.fox.wu#gmail.comHomepage:http://blog.csdn.net/wooinCopyright:该文章版权由吴垠和他可爱的老婆小包子所有。可在非商业目的下任意传播和复制。对于商业目的下对本文的任何行为需…