精华内容
下载资源
问答
  • 页面下载多个文件创建临时压缩包调用浏览器自带弹窗下载 根据如上随笔记录,多个文件下载成压缩包压缩包下载成功。...调整下载方法之前关闭输出流,下载压缩包解压成功。 需要确保所有输入输出流关闭。临时压...

    页面下载多个文件创建临时压缩包调用浏览器自带弹窗下载

    根据如上随笔记录,多个文件下载成压缩包,压缩包下载成功。但是解压时提示报错:

    利用程序打包并下载的zip压缩包:
    用“306压缩软件”能打开;
    用“winrar软件”打不开,提示报错内容损失

    具体原因如下图,低级错误:下载文件时,输出流还没有关闭。

    调整到下载方法之前关闭输出流,下载压缩包解压成功。

    需要确保所有输入输出流关闭。临时压缩包文件才能删除。

    转载于:https://www.cnblogs.com/mangwusuozhi/p/11139231.html

    展开全文
  • 流是一组有序的数据序列,根据操作的类型,可分为输入流和输出流两种。I/O(Input/Output,输入/输出)流提供了一条通道程序,可以使用这条通道把源中的字节序列送目的地。虽然 I/O 流通常与磁盘文件存取有关,...

    一、流概述

    流是一组有序的数据序列,根据操作的类型,可分为输入流和输出流两种。I/O(Input/Output,输入/输出)流提供了一条通道程序,可以使用这条通道把源中的字节序列送到目的地。虽然 I/O 流通常与磁盘文件存取有关,但是程序的源和目的地也可以是键盘、鼠标、内存和显示器窗口等。

    Java 由数据流处理输入/输出模式,程序从指向源的输入流中读取源中的数据。源可以是文件、网络、压缩包或其他数据源。

    输出流的指向是数据要到达的目的地,程序通过向输出流写入数据把信息传递到目的地。输出流的目标可以是文件、网络、压缩包、控制台和其他数据输出目标。

        

     

    二、输入/输出流

    Java 语言定义了许多类专门负责各种方式的输入/输出,这些类都被放在 java.io 包中。其中,所有输入流类都是抽象类 InputStream(字节输入流)或抽象类 Reader(字符输入流)的子类;而所有输出流都是抽象类 OutputStream(字节输出流)或抽象类 Writer(字符输出流)的子类。

    2.1 输入流

    InputStream 类是字节输入流的抽象类,是所有字节输入流的父类。 InputStream 类的具体层次结构如下图 :

    该类中所有方法遇到错误时都会引发 IOException 异常。类中的常用方法 :

    ( 1 ) : read()  方法 :从输入流中读取数据的下一个字节。返回 0~255 范围内的 int 字节值。如果因为已经到达流末尾而没有可用的字节,则返回值 -1 。

    ( 2 ) :read(byte[] b) :从输入流中读入一定长度的字节,并以整数的形式返回字节数。

    ( 3 ) :mark(int readlimit) 方法 :在输入流的当前位置放置一个标记,readlimit 参数告知此输入流在标记位置失效之前允许读取的字节数。

    ( 4 ) :reset() 方法 :将输入指针返回到当前所做的标记处。

    ( 5 ) :skip(long n) 方法 :跳过输入流上的 n 个字节并返回实际跳过的字节数。

    ( 6 ) :markSupported() 方法 :如果当前流支持 mark() / reset() 操作就返回 True 。

    ( 7 ) :close() 方法 :关闭此输入流并是方法与该流关联的所有系统资源。

    ps :并不是所有的 InputStream 类的子类都支持 InputStream 中定义的所有方法,如 skip() 、mark() 、reset() 等方法只对某些子类有用。

    Java 中的字符是 Unicode 编码,是双字节的。InputStream 是用来处理字节的,并不适合处理字符文本。Java 为字符文本的输入专门提供了一套单独的类 Reader ,但 Reader 类并不是 InputStream 类的替换着,只是在处理字符串是简化了编程。Reader 类是字符输入流的抽象类,所有字符输入流的实现都是它的子类。Reader 类的层次结构如下图 :

    2.2 输出流

    OutputStream 类是字节输出流的抽象类,此抽象类是表示输出字节流的所有类的超类。OutputStream 类的层次结构如下图 :

    OutputStream 类中的所有方法均返回 void ,在遇到错误时会引发 IOException 异常。OutputStream 常用的方法 :

    ( 1 ) :write(int b) 方法 :将指定的字节写入此输出流 。

    ( 2 ) :write(byte[] b) 方法 :将 b 个字节从指定的 byte 数组写入此输出流 。

    ( 3 ) :write(byte[] b , int off , int len) 方法 :将指定 byte 数组从偏移量 off 开始的 len 个字节写入此输出流 。

    ( 4 ) :flush() 方法 :彻底完成输出并清空缓存区 。

    ( 5 ) :close() 方法 :关闭输出流 。

    Write 类是字符输出流的抽象类,所有字符输出类的实现都是它的子类。Write 类的层次结构如下图 :

    三、File 类

    File 类是 java.io 包中唯一代表磁盘文件本身的对象。File 类定义了一些与平台无关的方法来操作文件,可以用过调用 File 类中的方法,实现创建、删除、重命名文件等操作。File 类的对象主要用来获取文件本身的一些信息,如文件所在的目录、文件的长度、文件读写权限等。数据流可以将数据写入到文件中,文件也是数据流最常用的数据媒体。

    3.1 文件的创建与删除

    可以使用 File 类创建一个文件对象。通常使用以下 3 种构造方法来创建文件对象 :

    ( 1 )  File(String pathname) :该构造方法通过将给定路径名字字符串转换为抽象路径名来创建一个新 File 实例。

    语法 :

    New File(String pathname)  //pathname  指路径名称(也包含文件名)
    
    eg : File file = new File("d:/1.txt");
    

    ( 2 )  File(String parent , String child) :该构造方法根据定义的父路径和子路径字符串(包含文件名)创建一个新的 File 对象。

    语法 :

    new File(String parent , String child) 
    //parent :父路劲字符串。例如:D: 或 D:/doc
    //child :子路径字符串。例如 :letter.txt 

    ( 3 )  File(File f , String child) :该构造方法根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。

    语法 :

    new File(File f , String child)
    // f :父路径对象。例如 :D:/doc/ 。
    // child : 子路径字符串 。 例如 :letter.txt

    当使用 File 类创建一个文件对象后。例如 :

    File file = new File("word.txt");

    如果当前目录中不存在名称为 word 的文件, File 类对象可通过调用 createNewFile() 方法创建一个名称为 word.txt 的文件;如果存在 word.txt 文件,可以通过文件对象的 delete() 方法将其删除。

    eg3.1 :在项目中创建类 FileTest ,在主方法中判断 D 盘的 myword 文件夹是否存在 word.txt 文件,如果该文件将其删除,不存在则创建该文件。

    package com.IODemo;
    
    import java.io.File;
    import java.io.IOException;
    
    public class FileTest {
    
    	public static void main(String[] args) {
    		File file = new File("word.txt");// 创建文件对象
    		if (file.exists()) {// 如果该文件存在
    			file.delete();// 将该文件删除
    			System.out.println("文件已删除");
    		} else {// 如果文件不存在
    			try {// try 语句块捕捉可能出现的异常
    				file.createNewFile();// 创建该文件
    				System.out.println("文件已创建");
    			} catch (IOException e) {
    				e.printStackTrace();
    			}
    		}
    	}
    }
    

    运行结果为 :

    文件已创建
    

      

    3.2 获取文件信息

    File 类提供了很多方法用于获取一些文件本身信息。

    表3.2 File 类的常用方法
    方法 返回值 说明
    getName() String 获取文件的名称
    canRead() boolean 判断文件是否是可读的
    canWrite() boolean 判断文件是否可被写入
    exits() boolean 判断文件是否存在
    length() long 获取文件的长度(以字节为单位)
    getAbsolutePath() String 获取文件的绝对路径
    getParent() String 获取文件的父路径
    isFile() boolean 判断文件是否存在
    isDirectory() boolean 判断文件是否是一个目录
    isHidden() boolean 判断文件是否是隐藏文件
    lastModified() long 获取文件最后修改时间

                    eg3.2 :获取当前文件夹下的 word.txt 文件的文件名、文件长度并判断该文件是否是隐藏文件。

    package com.IODemo;
    
    import java.io.File;
    
    public class getFileInfoTest {
    
    	public static void main(String[] args) {
    		File file = new File("D:myword/word.txt");// 创建文件对象
    		if (file.exists()) {// 如果该文件存在
    			String name = file.getName();// 获取文件名称
    			long length = file.length();// 获取文件长度
    			boolean hidden = file.isHidden();// 判断文件是否是隐藏文件
    			System.out.println("文件名称:" + name);
    			System.out.println("文件长度是:" + length);
    			System.out.println("该文件是隐藏文件吗?" + hidden);
    		} else {// 如果文件不存在
    			System.out.println("该文件不存在");
    		}
    	}
    }
    

    运行结果为 :

    文件名称:word.txt
    文件长度是:0
    该文件是隐藏文件吗?false

     

     

     

     

    展开全文
  • Java IO

    2021-03-07 20:03:38
    一.流概述 流是一组有序的数据序列,根据操作的类型,可分为输入...输出流的指向是数据要到达的目的地,程序通过向输出流中能够写入数据把信息传递目的地。 输出流的目标可以文件,网络,压缩包等数据输出目标。 ...

    一.流概述
    流是一组有序的数据序列,根据操作的类型,可分为输入流和输出流两种。
    1,输入流
    Java由数据流处理输入/输出模式,程序从指向源的输入流中读取源中的数据。
    源可以是文件,网络,压缩包等数据源。
    Java由数据流处理输入/输出模式,程序从指向源的输入流中读取源中的数据。
    2,输出流
    输出流的指向是数据要到达的目的地,程序通过向输出流中能够写入数据把信息传递到目的地。
    输出流的目标可以文件,网络,压缩包等数据输出目标。输出流的指向是数据要到达的目的地,程序通过向输出流中能够写入数据把信息传递到目的地。
    IO流常用类

    一.FileInputStream读取文件数据
    1、通过FileInputStream(String name)构造方法创建FileInputStream对象时,传入的待读取文件的路径,可以是相对路径也可以是绝对路径。
    2、在读取文件数据时,必须保证文件是存在并且可读的,否则会抛出文件找不到的异常FileNotFoundException。
    3、FileInputStream类有三个重载的read()方法,如果方法返回值为-1,均表示已读取到了文件的结尾。
    4、为了使流对象所占用的系统资源得到释放,请记住调用FileInputStream类close()方法关闭字节流。
    二.FileOutputStream写入数据
    1、与FileInputStream读取的文件必须存在不同,FileOutputStream写入数据的文件不必是已存在的,因为该文件会被自动创建。
    2、FileOutputStream类有三个重载的write()方法,可以分别向文件中一次写入单个字符、字符数组以及数组的部分数据。

    三.字节缓冲流拷贝大文件
    1、BufferedInputStream和BufferdOutputStream字节缓冲流在初次拷贝文件时耗时较长,之后耗时较少。
    四.FileReader读取字符数据
    1、FileReader和FileInputStream有非常多相似之处,但是FileReader每次读取的单位是一个字符,而FileInputStream每次读取的单位是一个字节。
    五.FileWriter写入字符数据
    2、FileWriter和FileOutputStream有非常多相似之处,但是FileWriter每次写入的单位是一个字符,而FileOutputStream每次写入的单位是一个字节。
    六.LineNumberReader读取加行号
    3、setLineNumber()方法设置当前行号,getLineNumber()方法读取当前行号。在实验当前行号初始值设为100,输出时行号却是从101开始的,这是因为LineNumberReader类在读取到换行符(’\n’)、回车符(’\r’)或者回车后紧跟换行符时,会将行号自动加1。
    七.File类的常用方法的使用
    File类有三个常用构造方法,如下表所示:
    1、File(String pathname) 通过指定的一个字符串类型的文件路径来创建一个新的File对象
    2、 File(String parent,String child) 根据指定的一个字符串类型的父路径和一个字符串类型的子路径(包括文件名称)创建一个File对象
    3、 File(File parent,String child) 根据指定的File类的父路径和字符串类型的子路径(包括文件名称)创建一个File对象
    4、三种常用构造方法创建File对象可以都使用,示例代码如下:
    // 方式1: File(String pathname)
    File file = new File(“c:\a.txt”);
    // 方式2: File(String parent,String child)
    File file = new File(“c:”, “a.txt”);
    // 方式3: File(File parent,String child)
    File parentfile = new File(“c:”);
    File file = new File(parentfile, “a.txt”);
    2、File类中的createNewFile()方法,当文件存在时不会创建,该方法返回值为false,文件不存在时才创建,如果创建成功,该方法返回值为true。
    3、在获取文件的最后修改时间操作中,使用到了DateFormat类,将File类中的lastModified()方法返回的毫秒值转换成了日期,更直观。
    4、除了上面实验中演示的方法外,File类中还有其它常用的方法,例如重新命名文件。File类非常重要,常用方法也特别多,建议大家在学习File类的过程中多查看API。

    八.递归遍历目录及其子目录下的文件
    1、File类中有一个list()方法,该方法用于遍历某个指定目录下的所有文件的名称,返回值类型是String[]类型,和它不同的是,listFiles()方法返回值类型是File[]类型。list()还有一个重载方法list(FilenameFilter filter),其中FilenameFilter是文件过滤器,在文件过滤器对象的accept()方法中可以对文件进行过滤操作,例如遍历指定扩展名的文件等。
    2、在实验中由于每次遍历文件的操作是相同的,因此fileDir()方法中可以使用递归的方式,即自身调用自身的情况。

    九.ByteArrayInputStream和ByteArrayOutputStream
    1、ByteArrayInputStream 包含一个内部缓冲区,该缓冲区包含从流中读取的字节。关闭 ByteArrayInputStream是无效的,该类中的方法在关闭此流后仍然可以被调用,而不会产生任何 IOException。
    2、ByteArrayOutputStream类实现了一个输出流,其中的数据被写入一个 byte 数组,缓冲区会随着数据的不断写入而自动增长。可使用 toByteArray() 和 toString() 获取数据。和ByteArrayInputStream一样,关闭ByteArrayOutputStream是无效的,该类中的方法在关闭此流后仍可被调用,而不会产生任何 IOException。
    3、虽然ByteArrayInputStream的缓冲区会根据存入数据的多少而自动变化,但是读取的文件非常大时,就不能使用这个类,否则会造成内存溢出。

    十.CharArrayReader和CharArrayWriter读写操作
    1、CharArrayReade从字符数组中读取数据,CharArrayWriter是在内存中创建一个字符数组缓冲区,它们的功能与ByteArrayInputStream、ByteArrayOutputStream类似,只不过操作的数据是字符。

    展开全文
  • 流:都有可能是文件,网络,压缩包,流按操作数据分为字节流和字符流 字节流按照一个字节8位来读(8位都是01010101类型的)字符流按照一个字符来读流按流向分为输入流和输出流例子:键盘输入然后存硬盘的文件里面...

    流是一组有序的数据序列

    源。。。。流:都有可能是文件,网络,压缩包,

    流按操作数据分为字节流和字符流

    c77ec34d64f0a25a6b7e4c23c78a39c5.png

    字节流按照一个字节8位来读(8位都是01010101类型的)

    字符流按照一个字符来读

    流按流向分为输入流和输出流

    例子:键盘输入然后存到硬盘的文件里面(多行输入)

    package suibian;

    import java.io.BufferedReader;

    import java.io.BufferedWriter;

    import java.io.File;

    import java.io.FileOutputStream;

    import java.io.IOException;

    import java.io.InputStream;

    import java.io.InputStreamReader;

    import java.io.OutputStreamWriter;

    public class Test {

    public static void main(String[] args) {

    String targetPath = "d:/keyBoard/input.txt";

    File targetFile = new File(targetPath);//准备文件接收他

    String msg = null;

    InputStream is = null;

    InputStreamReader isr = null;

    BufferedReader br = null;

    FileOutputStream fos = null;

    OutputStreamWriter osw = null;

    BufferedWriter bw = null;

    try {//控制台得到GBK字符,他会自动帮你转字节

    is = System.in; //流引用尽量在代码块中执行

    isr = new InputStreamReader(is,"UTF-8");然后你读字符按照GBK的格式把自己读入的字节转成GBK编码的字符

    br = new BufferedReader(isr);

    /*FileOutputStream(File file, boolean append)

    Creates a file output stream to write to the file represented by the specified File object*/

    fos = new FileOutputStream(targetFile, true);

    //输出的时候把字节按照utf-8的格式输出来,因为utf-8的格式包含GBk,utf-8更加灵活

    osw = new OutputStreamWriter(fos, "UTF-8");

    bw = new BufferedWriter(osw);

    while (true) {

    msg = br.readLine();

    System.out.println(msg);

    if ("over".equals(msg)) {

    break;

    }

    bw.write(msg, 0, msg.length());

    bw.newLine();

    bw.flush();

    }

    } catch (Exception e) {

    e.printStackTrace();

    } finally {

    try {

    if (null != is) {

    is.close();

    }

    if (null != isr) {

    isr.close();

    }

    if (null != br) {

    br.close();

    }

    if (null != fos) {

    fos.close();

    }

    if (null != osw) {

    osw.close();

    }

    if (null != bw) {

    bw.close();

    }

    } catch (IOException ioe) {

    ioe.printStackTrace();

    }

    }

    }

    }

    展开全文
  • 问题现象: 今天在项目中需要使用了zip解压技术,用于解压压缩包,从而获取...zip解压缩文件的时候,涉及文件io流(输入输出流)的问题,因此需要注意流的关闭问题。 解决方法: 分享一下我的工具类,开箱即用:
  • Java流

    2020-12-22 16:41:28
    输出流:把内存中的数据写其他设备上。 inputstream输入流。 outputstream输出流。 从服务器上读取文件,获取服务器文件的inputstream,把文件内容读内存中。 在把读取的内容成压缩包输出服务器上,内存...
  • 流是一组有序的数据序列,根据操作的类型,可以分为输入流...输出流的指向是数要到达的目的地,程序通过向输出流中写入数据把信息传递目的地。输出流的目标可以是文件、网络、压缩包、控制台和其他数据输出目标。...
  • 流:都有可能是文件,网络,压缩包,流按操作数据分为字节流和字符流 字节流按照一个字节8位来读(8位都是01010101类型的)字符流按照一个字符来读流按流向分为输入流和输出流例子:键盘输入然后存硬盘的文件里面...
  • Java--I/O(输入输出)

    2019-02-08 15:59:55
    流是一组有序的数据序列,根据操作可分为输入流和输出流即(I/O流),I/O流也可以理解为一种通道程序。而I/O包提供给了很多工具(类)对I/O流进行操作,从而达到安全地将源数据通过流传送目的地的目的。源和目的地...
  • 后台接收后进行数据处理拿要下载文件的下载地址,循环下载地址,用压缩,将文件直接写入压缩包,最后利用文件下载将压缩包输出给前端。一、前端JS发送下载请求1、ajax无法发送下载请求关于下载的常见需求无非...
  • 特点:把多excel直接生成zip实体中,然后把压缩包保存本地;把压缩包响应浏览器 优点:比三步下载少下载Excel文件,只需要把zip流输出到本地 难点:ZipEntry的特性 第一步:在程序内生成Excel文件,把数据...
  • 输出流指向数据要到达的目的地,程序向输出流写入数据把信息传递目的地。输出流的目标可以是文件、网络、压缩包、控制台和其他数据输出目标。 15.2输入输出流 java.io包 所有输入流类都是InputStream或抽象类...
  • 先 通过 httpclient 请求 得到 pdf相关的字节数组,而后,把字节数组转成 pdf文件,再 把 pdf 转成 jpg,再 以压缩包 的形式,输出到页面, 这个问题搞一天了,没搞出来,谁做过,帮我看一下,我贴一下源码: ``` ...
  • java导出多个excel,以压缩包下载

    千次阅读 热门讨论 2018-06-26 15:21:39
    1.java servlet一个请求,只能返回一个输出流,所以一次只能导出一个excel; 2.如果一次需要导出多个excel,可以在本地生成多个excel,然后压缩成压缩包,然后下载压缩包; 步骤: 1.在本地创建一个零时文件夹,将多个...
  • Java访问权限控制源代码 1个目标文件 摘要:Java源码,文件操作,权限控制 Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写文件的信息、定义文件,输出c:/hello.txt、写信息文件、关闭输出流。...
  • Java访问权限控制源代码 1个目标文件 摘要:Java源码,文件操作,权限控制 Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写文件的信息、定义文件,输出c:/hello.txt、写信息文件、关闭输出流。...
  • 输入输出流I/O

    2016-03-13 23:46:00
    流是一组有序的数据序列,根据操作的类型,可分为输入流和输出流两种。I/O流提供了―条通道程序,可以使用这条通道把源中的字节序列送目的地,虽然I/O流经常与磁盘文件存取有关,但是程序的源和目的地也可以是...
  • I/O1——输入/输出流

    2017-03-22 14:06:05
    流是一组有序的数据序列,根据操作的类型,可以分为输入流和输出流两种。I/O(Input/Output,输入/输出)流提供了一条通道程序,可以使用这条通道把源中的字节序列送目的地。 Java由数据流处理输入/输出模式,...
  • 输入输出流(I/O)

    2016-03-15 21:52:00
    流是一组有序的数据序列,根据操作的类型,可分为输入流和输出流两种。I/O流提供了―条通道程序,可以使用这条通道把源中的字节序列送目的地,虽然I/O流经常与磁盘文件存取有关,但是程序的源和目的地也可以是...
  • 一、流的概述 流是一组有数的数据序列,根据操作类型,可以分为输入流和输出流。I/O(Input/Output,输入/输出)流...输出流的指向是数据要到达的目的地,程序通过向输出流中写入数据把信息传递目的地,输出流的的目标
  • java I/O(输入/输出

    2020-08-11 21:39:00
    流概述 流是一组有序的数据序列,根据操作的类型,可分为输入流和输出流。...输出流的指向是数据要到达的目的地,程序通过向输出流中写入数据把信息传递目的地。输出流的目的可以是文件、网络、压缩包
  • 1、 流概述 流是一组有序的数据序列,根据操作的类型,可分为输入流和输出...输出流的指向是数据要到达的目的地,程序通过向输出流中写入数据把信息传递目的地。输出流的目标可以是文件、网络、压缩包、控制台和其
  • java复习之I/O

    2016-10-05 14:47:56
    是什么流是一组有序的数据序列,根据操作的类型可...java由数据流处理输入输出模式,程序从指向源的输入流中读取流中的数据,源可以是文件,网络,压缩包和其他形式的数据源。分类1,输入输出流的分类 未完待续……
  • 第12章 输入和输出一、流概述流是指一组有序的数据序列...所有输出流都是抽象类OutputStream(字节输出流)和抽象类Writer(字符输出流)的子类。1、输入流InputStream是所有字节输入流的父类,该类主要方法如下,方法出...
  • 输出流是指向数据要到达的目的地,程序通过输出流中写入数据把信息传递目的地,目标可以是文件,网络、压缩包、控制台等,(以OutPutStream、Writer结尾的流)。 输入模式 输出模式​​​​ 按处理的数据单元...
  • 第12章 输入和输出 一、流概述 流是指一组有序的数据序列,数据源和...所有输出流都是抽象类OutputStream(字节输出流)和抽象类Writer(字符输出流)的子类。 1、输入流 InputStream是所有字节输入流的父类,...
  • java源码包---java 源码 大量 实例

    千次下载 热门讨论 2013-04-18 23:15:26
     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...
  • Java I/O

    2020-06-04 15:39:51
    1 I/O 目标: 了解流的概念 了解输入/输出流的分类 掌握文件输入/输出流的使用方法 掌握带缓存的输入/输出流的使用方法 ...输出流的指向是数据要到达的目的地,程序通过向输出流中写入数据把信息传递目的地
  • java后端代码–后端发送http请求,将inputstream 写入response的输出流中 1:pom.xml里面添加依赖 2:下载的代码 批量文件下载,并动态生成压缩包zip 1:js – 前端–发送请求–获取多个地址 2:后端代码 2.1 ...

空空如也

空空如也

1 2 3 4
收藏数 79
精华内容 31
关键字:

java输出流到压缩包

java 订阅