精华内容
下载资源
问答
  • Java 字节流读写文件

    千次阅读 2019-05-07 09:49:31
    Java字节流读写文件 针对文件的读写,JDK专门提供了两个类,分别是 FileInputStream 和 FileOutputStream ,它们都是InputStream 的子类。 FileInputStream 是操作文件的字节输入流,专门用于读取文件中的数据。 ...

    Java:字节流读写文件

    针对文件的读写,JDK专门提供了两个类,分别是 FileInputStreamFileOutputStream ,它们都是InputStream 的子类。

    • Example01:以字节流形式读取文件中的数据
    • Example02:将数据以字节流形式写入文件(覆盖文件内容)
    • Example03:将数据以字节流形式写入文件(追加文件内容)

    1.FileInputStream 是操作文件的字节输入流,专门用于读取文件中的数据。

    public class Example01 {
       public static void main(String[] args) throws IOException  {
       	FileInputStream in = new FileInputStream("Example1.txt");
       	int b = 0;
       	while(true) {
       		b = in.read();
       		if(b == -1) {
       			break;
       		}
       		System.out.println(b);
       	}
       	in.close();	
       }
    }
    

    注意:首先要确保文件 Example1.txt 存在并且可读,否则会抛出文件找不到的异常 FileNotFoundException

    2.FileOutputStream 是操作文件的字节输出流,专门用于把数据写入文件。

    public class Example02 {
    	public static void main(String[] args) throws IOException {
    		//创建一个文件字节输出流
    		FileOutputStream out = new FileOutputStream("Example2.txt");
    		String str = "****写入数据****";
    		byte[] b = str.getBytes();
    		for(int i=0; i<b.length; i++) {
    			out.write(b[i]);
    		}
    		out.close();
    	}
    }
    

    注意:程序运行后,会自动生成一个新的文本文件 Example2.txt 。如果 Example2.txt 已经存在数据,那么该文件中的数据会先被清空,再写入新的数据。

    3.FileOutputStream 的构造函数 FileOutputStream(String fileName,boolean append) ,用于把数据追加写入文件。

    public class Example03 {
    	public static void main(String[] args) throws IOException {		
    		FileOutputStream out = new FileOutputStream("Example2.txt", true);		
    		String str = "----追加数据----";		
    		byte[] b = str.getBytes();
    		for(int i=0; i<b.length; i++) {
    			out.write(b[i]);
    		}
    		out.close();
    	}
    }
    

    注意:程序通过字节输出流对象向文件 Example2.txt 追加了数据。

    由于IO流在进行数据读写操作时会出现异常,如果一旦遇到异常,IO流的 close() 方法将无法得到执行,流对象所占有的系统资源将得不到释放,因此,为了保证IO流的 close() 方法必须执行,通常将关闭流的操作写在 finally 代码块中。

    finally{
    	try{
    		if(in != null)
    			in.close();
    	}catch(Exception e){
    		e.printStackTrace();
    	}
    	try{
    		if(out != null)
    			out.close();
    	}catch(Exception e){
    		e.printStackTrace();
    	}
    }
    

    希望能够帮助到大家! Java:字节数组和字符串的相互转化

    展开全文
  • JAVA字节流读写中文

    2019-02-08 21:24:16
    1.字节流读取中文的问题 字节流在读中文的时候有可能会读到半个中文,造成乱码  2.字节流写出中文的问题 字节流直接操作的字节,所以写出中文必须将字符串转换成字节数组,写出回车换行 write("\r\n"....

    一、问题

    1.字节流读取中文的问题

    字节流在读中文的时候有可能会读到半个中文,造成乱码 

    2.字节流写出中文的问题

    字节流直接操作的字节,所以写出中文必须将字符串转换成字节数组,写出回车换行 write("\r\n".getBytes());

    二、代码

    public static void main(String[] args) throws IOException {
       FileInputStream fis = new FileInputStream("yyy.txt");
       FileOutputStream fos = new FileOutputStream("zzz.txt");
    
       byte[] arr = new byte[4];
       int len;
       while((len = fis.read(arr)) != -1) {
          fos.write(new String(arr,0,len).getBytes());
       }
       fos.write("\r\n".getBytes());
       fos.write("我读书少,你不要骗我".getBytes());
    
       fis.close();
       fos.close();
    }

     

    展开全文
  • 字节流和字符流的区别: ...字节流读写示例: public static void main(String[] args) { String path = "D:/study_project/1.jpg"; String path1 = "D:/study_project/2.jpg"; String pat

    字节流和字符流的区别:

    字节流就是可以读取图片,文本,视频等二进制数据;字符流只能读取纯文本文件。

    字节流读写示例:

    public static void main(String[] args) {
    		String path = "D:/study_project/1.jpg";
    		String path1 = "D:/study_project/2.jpg";
    		String path2 = "D:/study_project/java-io-test.txt";
    		String path3 = "D:/study_project/java-io-test-to.txt";
    //		readTxt(path2);
    		writeFile(path2,path3);
    
    	}
    /**
    	 * 文件的写入:
    	 * @param fromPath 源
    	 * @param toPath   目标
    	 */
    	public static void writeFile(String fromPath,String toPath) {
    		BufferedInputStream fis = null;
    		BufferedOutputStream fos = null;
    		int len = 2;
    		byte[] buffer = new byte[len];
    		try {
    			fis = new BufferedInputStream(new FileInputStream(fromPath));
    			fos = new BufferedOutputStream(new FileOutputStream(toPath));
    			while ((fis.read(buffer, 0, len)!=-1) && buffer.length > 0) {
    				fos.write(buffer, 0, buffer.length);
    			}
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    			System.out.println("文件没有找到");
    		} catch (IOException e) {
    			e.printStackTrace();
    			System.out.println("文件读取异常");
    		} finally {
    			try {
    				fis.close();
    				fos.close();
    			} catch (Exception e2) {
    				System.out.println(e2);
    			}
    		}
    	}


    字符流读写:

    public static void main(String[] args) {
    		
    		String path = "D:/study_project/1.jpg";
    		String path1 = "D:/study_project/2.jpg";
    		String path2 = "D:/study_project/java-io-test.txt";
    		String path3 = "D:/study_project/java-io-test-to.txt";
    		
    		readChar(path2,path3);
    	}
    	public static void readChar(String fromPath,String toPath){
    		BufferedReader read  = null;
    		BufferedWriter write  = null;
    		int len = 20;
    		char[] buffer = new char[len];
    		try {
    			read =  new BufferedReader(new InputStreamReader(new FileInputStream(fromPath), "utf8"));
    			write = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(toPath),"utf8"));
    			while ((read.read(buffer, 0, len)!=-1) && buffer.length > 0) {
    				write.write(buffer, 0, len);
    			}
    			write.flush();
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    			System.out.println("文件没有找到");
    		} catch (IOException e) {
    			e.printStackTrace();
    			System.out.println("文件读取异常");
    		} finally {
    			try {
    				read.close();
    				write.close();
    			} catch (Exception e2) {
    				System.out.println(e2);
    			}
    		}
    	}



    展开全文
  • Java字节流与字符流读写文件

    万次阅读 2018-12-11 19:04:04
    字节流读写 Java中文件读写有多种方式,但有一种读写方式可以处理任何场景的文件读写,就是字节流的读写。 package com.main.stream; import java.io.File; import java.io.FileInputStream; import java.io....

     

    字节流读写

    Java中文件读写有多种方式,但有一种读写方式可以处理任何场景的文件读写,就是字节流的读写。

    package com.main.stream;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    
    /**
     * 字节流文件读写
     * @author PC
     *
     */
    public class FileRwByByte {
    
    	public static void main(String[] args) throws IOException {
    		// 定义源文件
    		File file = new File("D:\\springboot学习\\34116codes.zip");
    		InputStream fis = new FileInputStream(file);
    		
    		// 获取文件名
    		String fileName = file.getName();
    		
    		// 定义写文件路径
    		String aimPath = "E:\\stream\\" + fileName;
    		OutputStream fos = new FileOutputStream(aimPath);
    		
    		// 定义字节,接收读取到的源文件字节内容
    		int by;
    		while ((by = fis.read()) != -1) {
    			fos.write(by);
    		}
    		
    		fos.flush();
    		fis.close();
    		fos.close();
    	}
    }

    这里按照一个字节一个字节的读取,将读取到的字节写入到新的文件中,达到文件复制粘贴的效果。

    上面程序可以正常执行,但是执行过程中,如果遇到10MB 以上的文件,可能会感觉特别的慢,原因就在于,程序中一个字节一个字节的读取,会增大文件读写的次数。

     

    如何改进,使用字节数组,一次读取多个字节,减少文件读写次数,提交程序执行效率。

    将程序中,按照字节单字节读取的部分,修改为按照字节数组读取。这时,输入流一次读取1024个字节,然后将读取到的字节直接输出写到文件中,大大增加程序的整体效率。

    // 定义字节数组,接收读取到的源文件字节内容
    byte[] bytes = new byte[1024];
    while (fis.read(bytes) != -1) {
    	fos.write(bytes);
    }

    附整段代码

    package com.main.stream;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    
    /**
     * 字节流文件读写
     * @author PC
     *
     */
    public class FileRwByByte {
    
    	public static void main(String[] args) throws IOException {
    		// 定义源文件
    		File file = new File("D:\\springboot学习\\34116codes.zip");
    		InputStream fis = new FileInputStream(file);
    		
    		// 获取文件名
    		String fileName = file.getName();
    		
    		// 定义写文件路径
    		String aimPath = "E:\\stream\\" + fileName;
    		OutputStream fos = new FileOutputStream(aimPath);
    		
    		// 定义字节数组,接收读取到的源文件字节内容
    		byte[] bytes = new byte[1024];
    		while (fis.read(bytes) != -1) {
    			fos.write(bytes);
    		}
    		
    		fos.flush();
    		fis.close();
    		fos.close();
    	}
    }

     

    字符流读写

    上面看了字节流的读写,有单字节的读写和读取字节数组两种方式。同样,字符流的读写也有单字符读写和字符数组两种方式。

    package com.main.stream;
    
    import java.io.File;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.Reader;
    import java.io.Writer;
    
    /**
     * 字符流文件读写
     * @author PC
     *
     */
    public class FileReaderDemo {
    
    	public static void main(String[] args) throws IOException {
    		// 定义源文件
    		File file = new File("E:\\test.txt");
    		Reader reader = new FileReader(file);
    		
    		// 获取文件名
    		String fileName = file.getName();
    		
    		// 定义写文件路径
    		String aimPath = "E:\\stream\\" + fileName;
    		Writer writer = new FileWriter(aimPath);
    		
    		// 定义字符,接收读取到的源文件字符内容
    		int ch;
    		while ((ch = reader.read()) != -1) {
    			writer.write(ch);
    		}
    		
    		writer.flush();
    		writer.close();
    		reader.close();
    	}
    }
    

    同样的原因,单字符读写会稍微慢一点,那么换字符数组读取呢?

    // 定义字符数组,接收读取到的源文件字符内容
    char[] chars = new char[1024];
    while (reader.read(chars) != -1) {
    	writer.write(chars);
    }

    只需要将读写操作方式的按单字符读写修改为按照数组的方式即可。

    附完整代码:

    package com.main.stream;
    
    import java.io.File;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.Reader;
    import java.io.Writer;
    
    /**
     * 字符流文件读写
     * @author PC
     *
     */
    public class FileReaderDemo {
    
    	public static void main(String[] args) throws IOException {
    		// 定义源文件
    		File file = new File("E:\\test.txt");
    		Reader reader = new FileReader(file);
    		
    		// 获取文件名
    		String fileName = file.getName();
    		
    		// 定义写文件路径
    		String aimPath = "E:\\stream\\" + fileName;
    		Writer writer = new FileWriter(aimPath);
    		
    		// 定义字符数组,接收读取到的源文件字符内容
    		char[] chars = new char[1024];
    		while (reader.read(chars) != -1) {
    			writer.write(chars);
    		}
    		
    		writer.flush();
    		writer.close();
    		reader.close();
    	}
    }
    

     

    纯粹防止自己忘记,文章记录。

    展开全文
  • 字节流以及字节缓冲流读写数据复制文件的四种方法: 1.一次读写一个字节; 2.一次读写一个字节数组; 3.缓冲流一次读写一个字节; 4.缓冲流一次读写一个字节数组; package anli; import java.io.*; /* ...
  • java IO字节流读写操作
  • 输入经常会看到read(参数:通常为数组),作用是把文件中的数据读取到该数组中,以提高效率(该数组叫做字节流缓冲区); 输出中的参数数组的形式为 write(数组) ,作用是把该数组中的数据写入到输出流中(输出...
  • 简单的文件读写 public static void main(String[] args) { String inFile = "D:\\Program Files (x86)\\kqUpJPG\\1.jpg"; String outFile = "D:\\Program Files (x86)\\2.jpg"; FileInputStream input = ...
  • Java_基础—字节流读写中文

    千次阅读 2017-07-24 09:35:37
    * 字节流读取中文的问题 * 字节流在读中文的时候有可能会读到半个中文,造成乱码 * 字节流写出中文的问题 * 字节流直接操作的字节,所以写出中文必须将字符串转换成字节数组 * 写出回车换行 write("\r\n"....
  • import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamRea...
  • 浅谈JAVA字节流读写文件)

    千次阅读 2014-02-12 17:41:21
    此抽象类是表示字节输入的所有类的超类。需要定义 InputStream 的子类的应用程序必须始终提供返回下一个输入字节的方法。  int available()  返回此输入方法的下一个调用方可以不受阻塞地从此输入读取...
  • JAVA IO :使用带缓冲的字节流读写数据 /**  * 使用带缓冲的字节流读取数据  * 比没有使用缓冲的方法COP所用的时间要长很多  * BufferedInputStream():带缓冲的字节流  *  */ public class ...
  • c++,java,php,c# 的网络字节流读写文件,文件的所有读写方式都采用的是大端,只有php有大端和小端2种选择。
  • java:IO流(字节流读写中文)

    千次阅读 2018-10-26 18:27:02
    * 字节流读取中文的问题  * 字节流在读中文的时候有可能会读到半个中文,造成乱码  FileInputStream fis=new FileInputStream("yyy.txt"); byte[] arr=new byte[4]; int len; while((len=fis....
  • Java基础-3】吃透Java IO:字节流、字符流、缓冲流

    万次阅读 多人点赞 2020-09-23 20:12:33
    什么是Java-IO?字符流和字节流的区别与适用场景是什么?缓冲流到底实现了什么?如何高效地读写文件? 本文用大量的示例图和实例,带你吃透Java IO。
  • java字节流形式读写文件

    千次阅读 2017-08-21 22:15:13
    java中以字节流的形式读取文件采用的是FileInputStream,将指定路径的文件以字节数组的形式循环读取,代码如下:public void ReadFileByByte(String path){ try { int length = 0; byte[] Buff = new byte...
  • java处理文件的类里面,stream结尾都是采用字节流,reader和writer结尾都是采用字符流。两者的区别就是读写的时候一个是按字节读写,一个是按字符。 字符流的底层就是字节流。而字符流主要是读取文本文件内容的,...
  • java import java.io.*; public class ShowFile { public static void main(String[] args) { int i; String filename = "1.txt"; //要打开文件的名称 FileInputStream fin=null; //fin初始化为空 ...
  • 新手小白学JAVA IO流 File 字节流 字符流

    万次阅读 多人点赞 2021-05-17 22:23:59
    IO简介 1 流Stream 在学习IO流之前,我们首先需要学习的概念就是Stream流 为了方便理解,我们可以把数据的读写...在java中,根据处理的数据单位不同,可以把流分为字节流和字符流 字节流 : 针对二进制文件 字符流 : 针对
  • Java中IO是以为基础进行输入输出的,所有数据被串行化写入输出,或者从输入读入。 java.io的描述 通过数据、序列化和文件系统提供系统输入和输出。 的概念 是一个很形象的概念,当程序需要读取数据...
  • 字节流读取中文的问题 字节流在读中文的时候有可能会读到半个中文,造成乱码。 字节流写出中文的问题 字节流直接操作字节,所以写出中文必须将字符串转换成字节数组。写出回车换行write("\r\n".getBytes()...
  • Java 字节流实现文件读写操作(InputStream-OutputStream) 备注:字节流比字符流底层,但是效率底下。 字符流地址:http://pengyan5945.iteye.com/blog/1092354 package com.frank.io; import ...
  • //仅作为学习笔记 ...字节流(操作图片要用到字节流) InputStream (读) OutputStream(写) 需求:想要操作图片数据,这时就需要用到字节流 */ import java.io.*; class FileStream { public s
  • 前言 Java有一套非常强大的文件...在字节流中,我们使用FileOutputStream进行对字节的输出。字节的表示可以使用byte表示单个的字节,也可以使用byte[] 表示字节数组。主要的方法除了常规的打开和关闭文件,主要有 r...
  • * 带有缓存流的字节流读写操作 * written by zouxu * time:2018.7.17 */ import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 84,317
精华内容 33,726
关键字:

java字节流读写

java 订阅