编程中的文件流

最近在看JAVA核心技术,本以为想看懂一些文件流,还有一些东西,但是自己没有理解。

这里我在网上总结的一些文件流的知识,希望可以对大家理解有帮助!!

   什么是流?

流,简单来说就是建立在面向对象基础上的一种抽象的处理数据的工具。在流中,定义了一些处理数据的基本操作,如读取数据,写入数据等,程序员是对流进行所有操作的,而不用关心流的另一头数据的真正流向。流不但可以处理文件,还可以处理动态内存、网络数据等多种数据形式。如果你对流的操作非常熟练,在程序中利用流的方便性,写起程序会大大提高效率的。

那么

如何判断流是输入流还是输出流?

以内存为参照物,如果数据是向内存流动是输入流, 反之则是输出流

java流分为两种流

1,字节流:可以用于读写二进制文件及任何类型文件byte

2,字符流:可以用于读写文件文本

字节流:输入(InputStream) 输出(OutputStream)

字符流:输入(Reader)         输出(writer)

下面的例子和注释是分别对应着文件流的几个功能的实战:

1、

测试文件属性,首先自己新建一个文件在E:盘下的根目录。

取名字叫做

测试文件.txt

然后运行下列代码:

创建文件

package io;

import java.io.File;

public class IoTest {

public IoTest(){

}

public void IoTest(){

//创建一个文件对象

File ff = new File("E:\\测试文件.txt");

//输出详细信息

System.out.println("文件路径 : " + ff.getAbsolutePath());

System.out.println("文件大小 : " + ff.length());

}

public static void main(String[] args) {

// TODO Auto-generated method stub

IoTest io = new IoTest();

io.IoTest();

}

}

2、创建文件和文件夹

package io;

import java.io.File;

import java.io.IOException;

public class IoTest {

public IoTest(){

}

public void IoTest(){

//下面有几种方法生成文件和目录

//创建一个文件对象

File ff = new File("E:\\测试文件.txt");

//输出详细信息

System.out.println("文件路径 : " + ff.getAbsolutePath());

System.out.println("文件大小 : " + ff.length());

//创建一个文件和创建文件夹

File f = new File("E:\\fff\\hsp.txt");

if(!f.exists()){

//可以创建

try{

f.createNewFile();

}catch(IOException e){

e.printStackTrace();

}

}else{

System.out.println("文件已经存在!!,无需创建!");

}

//判断是否生成文件夹

File fff = new File("E:\\fff");

if(f.isDirectory() && f.exists()){

System.out.println("文件夹已经存在!!");

}else{

//如果不存在则生成文件夹

f.mkdir();

}

//列出文件夹的所有文件

File ffff = new File("E:\\123");

if(ffff.isDirectory()){

File list[] = fff.listFiles();

for(int i = 0; i < list.length; i++){

System.out.println("文件名 :  " + list[i].getName());

}

}

}

public static void main(String[] args) {

// TODO Auto-generated method stub

IoTest io = new IoTest();

io.IoTest();

}

}

3、读取文件内容

package net.test2;

import java.io.File;

import java.io.FileInputStream;

import java.io.IOException;

public class IoTest2 {

public IoTest2(){

File f = new File("E:\\Text.txt");

FileInputStream fis = null;

//因为File没有读写能力,所以需要有个InputStream

try{

fis = new FileInputStream(f);

//定义一个字节数组,相当于缓存

byte[] bytes = new byte[1024];

//定义实际读取到的字节数

int n = 1024;

//循环读取

while((fis.read(bytes) != -1)){

String s = new String(bytes, 0, n);

System.out.println(s);

}

}catch(Exception e){

e.printStackTrace();

}finally{

//关闭必须在这里执行,是因为,这里的代码是必须运行的

try{

fis.close();

}catch(IOException e){

e.printStackTrace();

}

}

}

public static void main(String[] args) {

// TODO Auto-generated method stub

IoTest2 io = new IoTest2();

}

}

4、

往文件中写入内容

//FileOutputStream使用

package net.test2;

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

public class IoTest3 {

FileOutputStream fos = null;

public IoTest3(){

File f = new File("E:\\ss.txt");

try{

fos = new FileOutputStream(f);

String s = "hello world";

String s1 = "你好";

//定义字节数组

byte[] bytes = new byte[1024];

//如何把String转化成为bytes数组

fos.write(s.getBytes());

fos.write(s.getBytes());

}catch(Exception e){

e.printStackTrace();

}finally{

try{

fos.close();

}catch(IOException e){

e.printStackTrace();

}

}

}

public static void main(String[] args) {

// TODO Auto-generated method stub

IoTest3 io = new IoTest3();

}

}

5、像文件中写入图片

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

public class IoTest5 {

public void IoTest5()

{

//先把图片加入到内存——》写入某个文件

//因为是二进制文件,只能用字节流完成

FileInputStream fis=null;

// 输出流

FileOutputStream fos=null;

try {

fis=new FileInputStream("e:/照片/12.jpg");

fos=new FileOutputStream("d:/12.jpg");

//用byte存储二进制文件,,byte数组相当于缓存

byte buf[]=new byte[1024];

int n=1024; //记录事迹读取到的字节数

//循环读取

while((fis.read(buf))!=-1)

{

//输出到指定文件夹

fos.write(buf);

}

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}finally

{

try {

fis.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

 

}

}

6、//演示缓存字符流

public class IoTest6 {

public static void main(String[] args) {

// TODO Auto-generated method stub

BufferedReader br=null;

BufferedWriter bw=null;  

try {

FileReader fr = new FileReader("d:/test.txt");

br=new BufferedReader(fr);

FileWriter fw=new FileWriter("d:/test1.txt");

bw= new BufferedWriter(fw);

//循环读取文件

String s="";

while((s=br.readLine())!=null)

{

//  System.out.println(s);

bw.write(s+"\r\n");

}

} catch (Exception e) {

// TODO: handle exception

}

finally{

try {

bw.close();

br.close();

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

 

}

}

}

时间: 2024-08-28 12:18:01

编程中的文件流的相关文章

文件_ _android从资源文件中读取文件流并显示的方法

======== 1   android从资源文件中读取文件流并显示的方法. 在android中,假如有的文本文件,比如TXT放在raw下,要直接读取出来,放到屏幕中显示,可以这样: private void doRaw(){ InputStream is = this.getResources().openRawResource(R.raw.ziliao); try{ doRead(is); }catch(IOException e){ e.printStackTrace(); } } pri

服务器编程中的文件描述符

linux系统下一切皆文件,通过虚拟文件系统(VFS)的机制将所有底层屏蔽掉,用户可以通过统一的接口来实现对不同驱动的操作,对于每一个文件需要一个引用来指示,此时文件描述符应用而生,文件描述符类似于widows下的handle,对于文件的大部分操作都是通过这个描述符来操作的,例如read,write.对于每一个文件描述符,内核使用三种数据结构来管理. (1)  每个进程在进程表中都有一个记录项,每个记录项中有一张打开文件描述符表,可将其视为一个矢量,每个描述符占用一项.与每个文件描述符相关联的是

在网络编程中的io流小问题

在客户端和服务端调用io流进行传输数据的过程中,当将数据write到outputstream中,需要及时刷新,否则会发生io阻塞. 在输入数据的时候,最好选用BufferedReader,因为readLine()方法自带换行,可以输入一段之后直接换行; 而在输出数据的时候,最好选择PrintWriter,并且构造方法选用true,打开自动刷新,调用println方法可以直接输出数据并刷新! 原文地址:https://www.cnblogs.com/doveshelly/p/8526008.htm

用JS获取Html中所有图片文件流然后替换原有链接

function displayHtmlWithImageStream(bodyHtml) { var imgReg = /<img.*?(?:>|\/>)/gi; var arr = bodyHtml.match(imgReg); if (arr != null) { for (var i = 0; i < arr.length; i++) { replaceImageUrlWithStream(bodyHtml, arr, i); } } } function replaceI

从request中获取文件流的两种方式,配置文件上传大小

原文地址:https://blog.csdn.net/xyr05288/article/details/80692132 原文地址:https://www.cnblogs.com/liu1275271818/p/12117914.html

C# IO操作(四)大文件拷贝(文件流的使用)、文件编码

     大文件拷贝(文件流的使用).文件编码 首先说一下大文件拷贝和文件流,因为计算机的内存资源是有限的,面对几个G甚至更大的文件,需要通过程序来完成拷贝,就需要用到文件流(因为我们无法做到把文件一次性加载到内存中:事实上,内存也不允许这么干),所以在C#中出现了内存流这个东西.先看下面的内容,File类中的常用读取文件方法会将文件内容一次性全部加载到内存中: 1 string sPath = @"C:\Users\Chens-PC\Desktop\Nginx.txt"; 2 //F

js 下载文件流

这个问题,先描述下最初的思路: 1.从接口中获取到文件流: 2.在浏览器中下载文件流: 按照上述问题在网上找答案,DOM File API,XMLHTTP,asp方法好多. 最后用最简单的方法window.location.href = apiUrl;直接实现了. 现在想想,就是一步下载,分开走就麻烦了.

httpclient3发送文件流

情境:web端上传文件到本地,本地使用httpclient转发到接口服务器存储. 1 //前期经过处理,其中list中为表单数据,ins中为文件流 2 PostMethod post = new PostMethod(url); 3 post.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, "UTF-8"); 4 5 List<Part> parts = new ArrayList<Par

webapi读取上传的文件流

逻辑说明 这里未引用System.Web.Mvc. 主要使用MultipartMemoryStreamProvider对象从Request中获取文件流. var provider = new MultipartMemoryStreamProvider(); await Request.Content.ReadAsMultipartAsync(provider); var items = provider.Contents.Where(c => c.Headers.ContentDispositi