精华内容
下载资源
问答
  • 比较这两种读取File对象的方案,FileReader适合用来上传文件,而ObjectURL则适合直接在浏览器进行操作,然后操作后再把处理后的数据进行上传,例如利用canvas截图或进行图片压缩等。当然,这一切都是要考虑兼容性的...

    在html4的年代,我们如果要在网页上呈现一张用户本地的图片,需要用户先把图片上传到服务器,再根据服务器提供的图片地址把图片下载下来,才能把图片在网页上呈现出来。这一来二往,起码已经费了两倍于这张图片的流量了,更别说服务器为了存储这张图片所花费的资源以及用户上传错了图片的冤枉成本(因为在html4时代,用户选择好图片后,往往只能看到图片的文件名,而无法通过预览图来进一步确认这张图片是否就是自己想要上传的)。

    html5提供了新玩法,光靠浏览器,就可以对本地的(其实也可以是远程的)文件(主要是图片)进行呈现、读取、处理等操作,而这一切,则是通过html5 file api来实现的。

    首先是数据结构,html5定义了一个file对象类型来表示文件,每个file对象对应一个文件。file对象有3个属性:name、size、type。name是不包含路径的文件名,size是以字节为单位的文件体积大小,type则是文件的MIME(例如image/jpg)。

    file对象不单独存在,而是以数组形式,存在一个名为FileList的数组中。那么,如何拿到这个FileList数组呢?目前,html5有两个途径可以拿到FileList,一是通过file类型的input,二是通过拖放操作的drop事件。

    通过file类型的input获取FileList

    或html5新增的可进行文件多选的multiple属性:

    一般,我们都是给input:file绑上一个onchange事件,以便在用户选定文件后,马上进行读取文件等下一步操作:

    //原生js

    var inputElement = document.getElementById("file-input");

    inputElement.addEventListener("change", handleFiles, false);

    function handleFiles() {

    var fileList = this.files;

    }

    //jquery版

    $('#file-input').on('change', function() {

    var fileList = this.files;

    });

    通过拖放操作drop事件

    首先要设定一个可供拖放的区域:

    另外,为了能触发drop事件,我们必须阻止dragenter和dragover事件的默认行为:

    var dropbox;

    dropbox = document.getElementById("dropbox");

    dropbox.addEventListener("dragenter", dragenter, false);

    dropbox.addEventListener("dragover", dragover, false);

    dropbox.addEventListener("drop", drop, false);

    function dragenter(e) {

    e.stopPropagation();

    e.preventDefault();

    }

    function dragover(e) {

    e.stopPropagation();

    e.preventDefault();

    }

    然后,我们就可以在drop事件的callback中,获取到fileList:

    function drop(e) {

    e.stopPropagation();

    e.preventDefault();

    var dt = e.dataTransfer;

    var files = dt.files;

    handleFiles(files);

    }

    怎么读取或利用file对象呢?

    html5提供了两个方案:FileReader和ObjectUrl。

    使用FileReader读取file对象

    首先需要实例化FileReader对象:

    var reader = new FileReader();

    利用FileReader读取file对象是一个异步的过程,我们需要先为FileReader设置好load事件的callback,告知FileReader在读取到file对象的数据后应该进行什么进一步的操作:

    reader.onload = function(e) {

    document.getElementById("image").src = e.target.result;

    }

    上面这段代码的意思是,FileReader读取到图片的数据后,把数据(DataUrl)放到的src属性里。

    最后,就是通过FileReader不同的方法,来决定读取file对象数据后用什么数据格式来存放,并实施读取:

    readAsArrayBuffer(file) :读取file对象并存放为ArrayBuffer对象(ArrayBuffer对象是什么我暂时没有搞清,应该是一种为了高效存取数据而产生的数据结构)。

    readAsText(file [, 'UTF-8']) :以一般文本模式读取file对象,值得注意的是,利用第二个参数(可选)可指定字符编码。

    readAsDataURL(file) :读取file对象并存放为data: URL格式的字符串。

    利用ObjectURL

    ObjectURL相当于文件的一个临时路径,此临时路径可随时生成、随时释放,在本地浏览器使用起来时,与普通的url无异。

    以把一张本地图片显示在页面上为例:

    var img = document.createElement("img");

    img.src = window.URL.createObjectURL(file);

    此时,src形如:blob:http://test.local.com/e03e8bbf-66ce-4fea-a8c8-772f9fdb4d40

    用这个src就能让浏览器从本地读取图片。

    这种方案相对用FileReader生成图片的base64编码并放到的src里来说,性能有了很大的提升。

    比较这两种读取File对象的方案,FileReader适合用来上传文件,而ObjectURL则适合直接在浏览器进行操作,然后操作后再把处理后的数据进行上传,例如利用canvas截图或进行图片压缩等。当然,这一切都是要考虑兼容性的。

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    展开全文
  • java字节流怎么读取数据字节读取数据例子如下: import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;/** * ...

    java字节流怎么读取数据

    字节流读取数据例子如下: import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;/** * 复制文件 * @author young * */public class CopyFil

    java中,用字节流字符流从文件中读取数据,有什么...java中,用字节流字符流从文件中读取数据,有什么不同??反正我最后都两者的区别就是读写的时候一个是按字节读写,一个是按字符。 实际使用通常差不多。 在读写文件需要对内容按行处理,比如比较特定字符,处理某一行数据的时候一般会选择字符流。 只是读写文件,和文件内容无关的,一般选择字节流。

    8e3cfdd0ba94df17773c08cbdd60e155.png

    java的几种IO流读取文件方式

    一、超类: 字节流: InputStream(读入流) OutputStream(写出流) 字符流: Reader(字符 读入流) Writer (字符写出流) 二、文件操作流 字节流: FileInputStream ,FileOutputStream 字符流: FileReader, FileWriter(用法与字节流基本相

    java中字节流转成字符流再转为字节流保存成二进制java中字节流转成字符流再转为字节流保存成二进制文件会有什么后果。 文1. InputStream 和OutputStream,两个是为字节流设计的,主要用来处理字节或二进制对象, 2. Reader和 Writer.两个是为字符流(一个字符占两个字节)设计的,主要用来处理字符或字符串. 字符流处理的单元为2个字节的Unicode字符。

    java 中简述使用流进行读写文本文件的步骤?

    在Java中IO操作也是有相应步骤的,以文件操作为例,主要的操作流程如下: 1。使用File类打开一个文件 2。通过字节流或字符流的子类,指定输出的位置 3。进行读/写操作 4。关闭输入/输出 5。

    java字节流读txt文件出现乱码怎么解决?

    要CSS布局HTML小编今天和大家分享用两个字节数组 用字节流 是不是要指定编码格式?

    利用字节文件输入输出流,编写程序完成文件的读,请问怎么编写?

    import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.RandomAcces

    用java分别以字节流和文本流方式实现文件的读写操刚学习java的 把代码写出来吧

    import java.io.File; import java.io.IOException; import java.io.FileOutputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; public class StreamTest { public static void main(String[] args) { StreamTe

    展开全文
  • 文件流 POC应用程序以流处理方法读取大文件 实施细节 实施了两种方法: 流:具有背压的简单缓冲以及与akka actor的聚合 Kafka:使用Kafka分离阅读和处理 怎么跑 技术栈 Scala2.13 sbt 1.4.7 Java 11 码头工人...
  • 使用C#读取文件流[转]

    2015-07-14 11:23:29
    你平时是怎么读取文件的?使用流读取。是的没错,C#给我们提供了非常强大的类库(又一次吹捧了.NET一番),里面封装了几乎所有...1、声明并使用File的OpenRead实例化一个文件流对象,就像下面这样 FileStream fs =
    你平时是怎么读取文件的?使用流读取。是的没错,C#给我们提供了非常强大的类库(又一次吹捧了.NET一番),里面封装了几乎所有我们可以想到的和我们没有想到的类,流是读取文件的一般手段,那么你真的会用它读取文件中的数据了么?真的能读完全么?

    通常我们读取一个文件使用如下的步骤:

    1、声明并使用File的OpenRead实例化一个文件流对象,就像下面这样

    FileStream fs = File.OpenRead(filename);

    或者

    FileStream fs = FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read);

    2、准备一个存放文件内容的字节数组,fs.Length将得到文件的实际大小,就像下面这样

    byte[] data = new byte[fs.Length];

    3、哇!开始读了,调用一个文件流的一个方法读取数据到data数组中

    fs.Read (data, 0, data.Length);

    呵呵!我们只写了3句就可以把文件里面的内容原封不动的读出来,真是太简洁了!可以这段代码真的能像你预期的那样工作么?答案是:几乎可以!在大部分情况下上面的代码工作的很好,但是我们应该注意Read方法是有返回值的,既然有返回值那么一定有其道理,如果按照上面的写法完全可以是一个没有返回值的函数。我想返回值的目的是,为了给我们一个机会判断实际读取文件的大小,从而来判断文件是否已经完全读完。所以上面的代码不能保证我们一定读完了文件里面的所有字节(虽然在很多情况下是读完了)。下面的方法提供了一个比上面方法更安全的方法,来保证文件被完全读出

    public static void SafeRead (Stream stream, byte[] data){

    int offset=0;

    int remaining = data.Length;

    // 只要有剩余的字节就不停的读

    while (remaining > 0){

    int read = stream.Read(data, offset, remaining);

    if (read <= 0)

    throw new EndOfStreamException("文件读取到"+read.ToString()+"失败!");

    // 减少剩余的字节数

    remaining -= read;

    // 增加偏移量

    offset += read;

    }

    }



    有些情况下你不知道流实际的长度比如:网络流。此时可以使用类似的方法读取流直到流里面的数据完全读取出来为止。我们可以先初始化一段缓存,再将流读出来的流信息写到内存流里面,就像下面这样:

    public static byte[] ReadFully (Stream stream){

    // 初始化一个32k的缓存

    byte[] buffer = new byte[32768];

    using (MemoryStream ms = new MemoryStream()){ //返回结果后会自动回收调用该对象的Dispose方法释放内存

    // 不停的读取

    while (true){

    int read = stream.Read (buffer, 0, buffer.Length);

    // 直到读取完最后的3M数据就可以返回结果了

    if (read <= 0)

    return ms.ToArray();

    ms.Write (buffer, 0, read);

    }

    }

    }



    虽然上面的例子都比较简单,效果也不是很明显(大部分都是对的),也许你早就会了,没关系这篇文章本来就是写给初学者的。

    下面的方法提供了一种使用指定缓存长度的方式读取流,虽然在很多情况下你可以直接使用Stream.Length得到流的长度,但是不是所有的流都可以得到。

    public static byte[] Read2Buffer (Stream stream, int BufferLen){

    // 如果指定的无效长度的缓冲区,则指定一个默认的长度作为缓存大小

    if (BufferLen < 1){

    BufferLen = 0x8000;

    }

    // 初始化一个缓存区

    byte[] buffer = new byte[BufferLen];

    int read=0; 

    int block;

    // 每次从流中读取缓存大小的数据,知道读取完所有的流为止

    while ( (block = stream.Read(buffer, read, buffer.Length-read)) > 0){

    // 重新设定读取位置

    read += block;



    // 检查是否到达了缓存的边界,检查是否还有可以读取的信息

    if (read == buffer.Length){

    // 尝试读取一个字节

    int nextByte = stream.ReadByte();



    // 读取失败则说明读取完成可以返回结果

    if (nextByte==-1){

    return buffer;

    }



    // 调整数组大小准备继续读取

    byte[] newBuf = new byte[buffer.Length*2];

    Array.Copy(buffer, newBuf, buffer.Length);

    newBuf[read]=(byte)nextByte;

    buffer = newBuf;// buffer是一个引用(指针),这里意在重新设定buffer指针指向一个更大的内存

    read++;

    }

    }

    // 如果缓存太大则使用ret来收缩前面while读取的buffer,然后直接返回

    byte[] ret = new byte[read];

    Array.Copy(buffer, ret, read);

    return ret;

    }


    原文地址:http://blog.csdn.net/NewOne1998/archive/2006/07/25/972966.aspx
    展开全文
  • import java.io.BufferedInputStream;import java.io....import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io...

    import java.io.BufferedInputStream;

    import java.io.BufferedOutputStream;

    import java.io.File;

    import java.io.FileInputStream;

    import java.io.FileNotFoundException;

    import java.io.IOException;

    import java.io.UnsupportedEncodingException;

    import javax.servlet.http.HttpServletRequest;

    import javax.servlet.http.HttpServletResponse;

    import org.apache.log4j.Logger;

    import org.springframework.stereotype.Controller;

    import org.springframework.web.bind.annotation.PathVariable;

    import org.springframework.web.bind.annotation.RequestMapping;

    import org.springframework.web.servlet.ModelAndView;

    @Controller

    public class FileManagerController {

    private static final Logger logger = Logger.getLogger(Thread

    .currentThread().getStackTrace()[1].getClassName());

    /**

    * 文件下载

    * @param filename 文件名

    * @param request

    * @param response

    * @return

    */

    @RequestMapping( "/component/file/downloadimage/{filename}")

    public ModelAndView downloadAppFile(@PathVariable("filename") String filename,

    HttpServletRequest request, HttpServletResponse response) {

    String clientip = request.getRemoteAddr();

    logger.info("[componentfile]收到来自[" + clientip + "]的下载请求。");

    String fileFolder = Constants.IMAGE_PATH;

    String filePath = fileFolder + filename;

    /*logger.debug("资源文件绝对路径:"+filePath+" 文件名:"+fileRename);

    String encoding = System.getProperty("file.encoding");

    logger.debug("操作系统编码:"+encoding);*/

    java.io.BufferedInputStream bis = null;

    java.io.BufferedOutputStream bos = null;

    try {

    long fileLength = new File(filePath).length();

    request.setCharacterEncoding("UTF-8");

    response.setContentType("text/html;charset=utf-8");

    response.setContentType("application/x-msdownload;");

    response.setHeader("Content-disposition", "attachment; filename="

    + new String(filename.getBytes("utf-8"), "ISO8859-1"));

    response.setHeader("Content-Length", String.valueOf(fileLength));

    bis = new BufferedInputStream(new FileInputStream(filePath));

    bos = new BufferedOutputStream(response.getOutputStream());

    byte[] buff = new byte[2048];

    int bytesRead;

    while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {

    bos.write(buff, 0, bytesRead);

    }

    } catch (UnsupportedEncodingException e) {

    logger.error("JSP对象中设置了无效编码。");

    } catch (FileNotFoundException e) {

    logger.error("资源文件:"+filePath+"不存在。");

    } catch (IOException e) {

    logger.debug("I/O异常。");

    } finally {

    if (bis != null) {

    try {

    bis.close();

    } catch (IOException e) {

    }

    }

    if (bos != null) {

    try {

    bos.close();

    } catch (IOException e) {

    }

    }

    }

    return null;

    }

    }

    public class Constants {

    private static final Logger logger = Logger.getLogger(Thread

    .currentThread().getStackTrace()[1].getClassName());

    //系统配置文件

    private static Properties resourcesCfg = null;

    static{

    try {

    resourcesCfg = new Properties();

    FileInputStream fis = new FileInputStream(

    java.net.URLDecoder.decode(

    Constants.class.getResource("/").getFile()

    +"/config.properties",

    "utf-8"));

    resourcesCfg.load(fis);

    } catch (FileNotFoundException e) {

    logger.error("找不到系统配置文件:config.properties");

    } catch (IOException e) {

    logger.error("读取系统配置文件[config.properties]出错.");

    }

    }

    //图片存放路径

    public final static String IMAGE_PATH = resourcesCfg.getProperty("image_path");

    }

    展开全文
  • Kotlin 读取文件流的写法

    千次阅读 2019-01-11 11:13:05
    最近碰到好多人不会kotlin中io的while循环条件语句怎么写,直接上代码吧。。。 fun copyFileTest() { val oldFile = File("E:SQLFULL_CHS.iso") val newFile = File("E:SQLFULL_CHS2.iso") newFile.deleteOnExit...
  • 因为很少接触到file流,这方面不是太了解。请各位帮忙看看。谢谢啦,谢谢啦,谢谢啦。 废话不多说,上代码。 package cn.test.dome; import java.io.*; public class TestDome { public static voi
  • 在使用下面这个写法时候UTF-8文件编码 在读取时候出现乱码问题。 File myFile=new File("文件路径"); BufferedReader in = new BufferedReader(new FileReader(myFile)); 应该修改为: BufferedReader in = new ...
  • FileReader:用来读取字符文件的便捷类。此类的构造方法假定默认字符编码和默认字节缓冲区大小都是适当的。要自己指定这些值,可以先在 FileInputStream 上构造一个 InputStreamReader。FileReader 用于读取字符。...
  • FileInputStream:从文件系统中的某个文件中获得输入字节。哪些文件可用取决于主机环境。...第一步: 创建输入对象 怎么创建?? ==》通过FileInputStream的构造方法创建 FileInputStream(Filefile) ...
  • !... ``` //main.cpp #include ...void framebuffer_size_callback(GLFWwindow* window, int width, int height);... GLFWwindow* window = glfwCreateWindow(SCR_WIDTH, SCR_HEIGHT, "LearnOpenGL", NULL, NULL);...
  • //构造文件FileFile f=new File(fileName);//判断是否为目录f.isDirectory();//获取目录下的文件名String[] fileName=f.list();...1、Java怎么读取文件package com.yyb.file;import java.io.File;import jav...
  • importjava.io.BufferedReader;importjava.io....importjava.io.File;importjava.io.FileReader;importjava.io.FileWriter;importjava.io.IOException;importjava.util.HashMap;importjava.util.Iterato...
  • //构造文件FileFile f=new File(fileName);//判断是否为目录f.isDirectory();//获取目录下的文件名String[] fileName=f.list();...1、Java怎么读取文件package com.yyb.file;import java.io.File;import jav...
  • upload file3 - h5读取文件流$('body').on('change','#J_upload_btn',function(){var source = $(this).get(0),file = source.files[0];var ireg = /image\/.*/i,file_type = file.type,file_name = file.name;if(!...
  • //构造文件filefile f=new file(filename);//判断是否为目录f.isdirectory();//获取目录下的文件名string[] filename=f.list();...1、java怎么读取文件package com.yyb.file;import java.io.file;import jav...
  • C#读取文件

    2018-01-15 11:48:32
    你平时是怎么读取文件的?使用流读取。是的没错,C#给我们提供了非常强大的类库(又一次吹捧了.NET一番),里面封装了几乎所有我们...1、声明并使用File的OpenRead实例化一个文件流对象,就像下面这样  FileStream f
  • f.isDirectory(); //获取目录下的文件名 ...String[] fileName=f.list();...//获取目录下的文件 ...1、Java怎么读取文件 [java] view plain copy package com.yyb
  • //构造文件FileFile f=new File(fileName); //判断是否为目录 f.isDirectory(); //获取目录下的文件名 ...String[] fileName=f.list();...1、Java怎么读取文件 package com.yyb.file; imp...
  • jsp提交form表单的时候servlet接收时候怎么接收file信息,又怎么读取,怎么获取file文件流,怎么获得file要求不使用框架,使用原生态方法解决问题
  • c#读取文件

    2013-09-16 15:13:00
    你平时是怎么读取文件的?使用流读取。是的没错,C#给我们提供了非常强大的类库(又一次吹捧了.NET一番), ...1、声明并使用File的OpenRead实例化一个文件流对象,就像下面这样 FileStream fs = F...
  • 通常我们读取一个文件使用如下的步骤: 1、声明并使用File的OpenRead实例化一个文件流对象,就像下面这样 FileStream fs = File.OpenRead(filename); 或者 FileStream fs = FileStream(filename, FileMode....
  • 网页端的代码是读取字节的方式进行书写的, FileStream.fs=File.OpenRead(FileName); { byte[] buffer=new byte[1024]; while(fs.position) { int ReadCount=fs.Read(buffer,0,1024); if(ReadCount==1024)...
  • 可以理解为一个数据的序列。输入表示从一个源读取数据,输出表示向一个目标写数据。 声明!图片来自菜鸟驿站]; BufferedReader br = new BufferedReader(new InputStreamReader...字节到字符的桥梁怎么
  • 你平时是怎么读取文件的?使用流读取。是的没错,C#给我们提供了非常强大的类库(又一次吹捧了.NET一番),里面封装了几乎所有我们...1、声明并使用File的OpenRead实例化一个文件流对象,就像下面这样 FileStrea...

空空如也

空空如也

1 2 3 4 5 ... 11
收藏数 213
精华内容 85
关键字:

怎么读取file文件流