广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >教你如何使用 JavaScript 读取文件
  • 957
分享到

教你如何使用 JavaScript 读取文件

2024-04-02 19:04:59 957人浏览 独家记忆
摘要

目录使用 javascript 读取文件概述选择带有输入元素的文件处理输入元素的变化事件从输入元素的 files 属性中获取一个 File 对象使用 FileReader 读取 Fi

您可以使用 JavaScript File api 加载选定文件的内容。本节介绍 File API 的基本用法。

现在让我们看看如何使用 File API。

使用 JavaScript 读取文件概述

选择带有输入元素的文件

html 中,您可以通过将 input 元素的 type 属性设置为 file 来选择文件。

<input type="file">

如果您想允许多个文件选择设置属性。

<input type="file" multiple>

用户选择文件后改变将发生一个事件

处理输入元素的变化事件

要捕获更改事件,首先:改变有一种方法可以直接在其中编写处理程序。您可以通过将其传递给 onchange 处理程序来立即在处理程序中访问输入元素,如下所示:

<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="utf-8" />
    <title>File Input Test</title>
    <script>
      function fileChanged(input) {
        console.log(input);
        for (let i = 0; i < input.files.length; i++) {
          console.log(input.files[i]);
        }
      }
    </script>
  </head>
  <body>
    <input type="file" onchange="fileChanged(this)" multiple/>
  </body>
</html>

您还可以动态获取输入元素来处理更改事件。

<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="utf-8" />
    <title>File Input Test</title>
    <script>
      window.addEventListener('load', () => {
        const f = document.getElementById('file1');
        f.addEventListener('change', evt => {
          const input = evt.target;
          for (let i = 0; i < input.files.length; i++) {
            console.log(input.files[i]);
          }
        });
      });
    </script>
  </head>
  <body>
    <input type="file" id="file1" multiple/>
  </body>
</html>

在这种情况下,输入元素被传递给事件对象的目标属性。

从输入元素的 files 属性中获取一个 File 对象

当更改事件发生时,输入元素的 files 属性将传递一个 File 对象,该对象表示所选文件。

如果您显示文件选择屏幕一次并按下取消按钮而不选择文件,将调用更改事件处理程序,但文件属性将是一个长度为 0 的数组

您可以将 File 对象保存在某处并稍后使用。

使用 FileReader 读取 File 对象

您可以使用 FileReader 对象来读取 File 对象的内容。通过将 File 对象传递给 FileReader 对象的读取文件的方法来开始读取。

读取文件的方法有以下几种。

  • readAsText()
  • readAsArrayBuffer()
  • readAsBinaryString()
  • readAsDataURL()

FileReader 对象读取 Blob 中的数据。File 对象也是一个 Blob,因为它是从 Blob 派生的。

当 FileReader 对象加载文件时,会调用 onload 事件。读取结果在 FileReader 对象的 result 属性中设置。

读取文本()读取后,字符串设置在结果中,readAsArrayBuffer()读取后,结果将设置为 ArrayBuffer 对象。

现在让我们看看如何实际读取文件。

读取文件示例

读取和显示所选文件的示例

在这里,我们将制作一个行为如下的示例。

选择文件后,将显示所选文件的内容。

显示在此操作检查中使用的 HTML 文件和样式表的内容。

HTML文件如下:请另存为file1.html。

<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="utf-8" />
    <title>File API 1</title>
    <script src="file1.js"></script>
    <link href="style.CSS" rel="external nofollow"  rel="stylesheet" />
  </head>
  <body>
    <input type="file" id="file1" />
    <pre id="pre1"></pre>
  </body>
</html>

输入元素的类型属性文件作为,作为一个ID文件 1已设置。

样式表样式.css如下。我只是稍微改变了字体并添加了背景颜色,但我没有做太多。

@import url('https://fonts.Googleapis.com/css?family=Roboto&display=swap');
@import url('Https://fonts.googleapis.com/css?family=Roboto+Mono&display=swap');
 
html {
    font-family: 'Roboto', sans-serif;
}
 
pre {
    font-family: 'Roboto mono', monospace;
    font-size: 0.9rem;
    background-color: #D6EAF8;
    padding: 10px;
}

JavaScript 文件file1.js如下。

window.addEventListener('load', () => {
  const f = document.getElementById('file1');
  f.addEventListener('change', evt => {
    let input = evt.target;
    if (input.files.length == 0) {
      console.log('No file selected');
      return;
    }
    const file = input.files[0];
    const reader = new FileReader();
    reader.onload = () => {
      const pre = document.getElementById('pre1');
      pre.innerHTML = reader.result;
    };
 
    reader.readAsText(file);
  });
});

在窗口对象的加载事件处理程序中,设置了该文件输入元素的更改事件处理程序。

当您进行文件选择操作时,这将调用更改事件处理程序。

一个 Event 对象被传递给事件处理程序。执行文件选择操作的输入元素被传递给事件对象的目标属性。这个输入元素文件该属性设置为选定文件对象的列表

这次我们没有在 input 元素上设置 multiple 属性,所以只会设置一个 File 对象。

拿到File对象后,接下来就是读取文件的地方了。

const file = input.files[0]; 
const reader = new FileReader(); 
reader.onload = () => { 
    const pre = document.getElementById('pre1');
    pre.innerHTML = reader.result;
};
 
reader.readAsText(file); 

这样,预文件的内容在元素中设置。

Promise 的事件处理和使用

好吧,在上面的代码中文件阅读器对象的 读取文本()在调用方法之前负载我已经设置了一个事件处理程序。

文件阅读器还有更多可用的事件,但每次设置它们然后调用它们可能有点复杂。

所以让我们使用 Promises 来组织我们的代码。

准备一个接收File对象的函数对象,如:

const readAsTextReader = file => {
  const reader = new FileReader();
 
  return new Promise((resolve, reject) => {
    reader.onloadstart = ev => {
      console.log(`onloadstart: total=${ev.loaded}/${ev.loaded}`);
    };
 
    reader.onloadend = ev => {
      console.log(`onloadend: total=${ev.loaded}/${ev.loaded}`);
    };
 
    reader.onprogress = ev => {
      console.log(`onprogress: total=${ev.loaded}/${ev.loaded}`);
    };
 
    reader.onerror = () => {
      reader.abort();
      reject('Unknown error occurred during reading the file');
    };
 
    reader.onload = () => {
      console.log('onload');
      resolve(reader.result);
    };
 
    reader.readAsText(file);
  });
};

这样,读取文件时的异步处理使用 Promise 的 then 和 catch,应用如下。

window.addEventListener('load', () => {
  const f = document.getElementById('file1');
  f.addEventListener('change', evt => {
    const input = evt.target;
    if (input.files.length == 0) {
      return;
    }
    const file = input.files[0];
    console.log(file);
 
    readAsTextReader(file)
      .then(value => {
        const pre = document.getElementById('pre1');
        pre.innerHTML = value;
      })
      .catch(reason => {
        alert(reason);
      });
  });
});

简单的二进制文件查看器

接下来,让我们创建一个简单的二进制文件查看器作为示例,不仅可以读取文本文件,还可以读取二进制文件。

 

 

选择文件并使用 FileReader 读取文件的位置是相同的。

然而,这一次readAsArrayBuffer()读取文件。结果作为 ArrayBuffer 返回。

ArrayBuffer 是 JavaScript 中的字节字符串。有关详细信息,请参阅“使用 ArrayBuffer 处理二进制数据”。

const readAsArrayBufferReader = file => {
  const reader = new FileReader();
 
  return new Promise((resolve, reject) => {
    reader.onerror = () => {
      reader.abort();
      reject('Unknown error occurred during reading the file');
    };
 
    reader.onload = () => {
      console.log('onload');
      resolve(reader.result);
    };
 
    reader.readAsArrayBuffer(file);
  });
};
 
window.addEventListener('load', () => {
  const f = document.getElementById('file1');
  f.addEventListener('change', evt => {
    const input = evt.target;
    if (input.files.length == 0) {
      return;
    }
    let file = input.files[0];
    console.log(file);
    if (!file) {
      return;
    }
    if (file.size > 50 * 1024) {
      alert('Please select a file smaller than 50kb.');
      return;
    }
 
    readAsArrayBufferReader(file)
      .then(buff => {
        console.log(buff);
        let s = '';
        let a = new Uint8Array(buff);
        for (let i = 0; i * 16 < a.length; i++) {
          let line = '';
          let p = i * 16;
          let b = a.slice(p, Math.min(a.length, p + 16));
          for (const e of b) {
            let h = e
              .toString(16)
              .toUpperCase()
              .padStart(2, '0');
            line += ' ' + h;
          }
          let addr = p
            .toString(16)
            .toUpperCase()
            .padStart(8, '0');
          line = `${addr}:${line}\n`;
          s += line;
        }
        let pre = document.getElementById('pre1');
        pre.innerHTML = s;
      })
      .catch(reason => {
        alert(reason);
      });
  });
});

这次文件大小限制为 50KB。

从读取为 ArrayBuffer 的数据创建一个 Uint8Array 对象。从那里片()格式化为以 16 字节为增量显示。

到目前为止,我们已经介绍了如何在 JavaScript 中使用 File 对象和 FileReader 读取文件,如何使用 Promise 简化异步处理,以及处理二进制数据的示例。

到此这篇关于如何使用 JavaScript 读取文件的文章就介绍到这了,更多相关js读取文件内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 教你如何使用 JavaScript 读取文件

本文链接: https://www.lsjlt.com/news/152828.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 教你如何使用 JavaScript 读取文件
    目录使用 JavaScript 读取文件概述选择带有输入元素的文件处理输入元素的变化事件从输入元素的 files 属性中获取一个 File 对象使用 FileReader 读取 Fi...
    99+
    2022-11-13
  • 一文教会你用Python读取PDF文件
    目录实战场景Python PDF 实战编码补充实战场景 Python 工程师在日常的工作中,经常会碰到解析和处理PDF文件的情况,实战中需求主要分为如下情况: 提取 PDF 中的文字...
    99+
    2022-11-11
  • 如何使用JavaScript读取文件
    如何使用JavaScript读取文件,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。读取方法:1、用“readAs...
    99+
    2022-10-19
  • 教你用Python按顺序读取文件夹中文件
    我们有时候会读取一个文件夹中的所有的文件。但是,os.listdir()返回的文件名不一定是顺序的,这就要求我们对返回的文件名列表进行排序:  这时我们想到利用Epoc...
    99+
    2022-11-10
  • 教你用Python读取CSV文件的5种方式
    目录第一招:简单的读取第二招:用nametuple第三招:用tuple类型转换第四招:用DictReader第五招:用字典转换在python里面,读取或写入csv文件时,首先要imp...
    99+
    2022-11-12
  • 教你如何通过JavaScript读取元素的样式
    目录一、getComputedStyle()1、getComputedStyle()是window的方法,可以获取元素当前的样式2、两个参数3、代码实例4、浏览器效果二、定义一个方法...
    99+
    2022-11-13
  • 如何使用python读取文件
    使用python读取文件的方法:1.使用open方式逐行读取;2.使用with方式逐行读取;3.使用read()函数读取文件的全部内容;具体方法如下:使用open方式逐行读取文件# 打开文件f = open("file.txt&q...
    99+
    2022-10-04
  • 如何使用Python读取xml文件
    目录 什么是xml?获得标签属性获得子标签获得标签属性值获得标签对之间的数据方法一方法二 什么是xml? xml即可扩展标记语言,它可以用来标记数据、定义数据类型,是一种允许用户对自...
    99+
    2023-05-15
    Python读取 Python读取xml Python读取文件
  • python如何使用fileinput读取文件
    这篇文章主要介绍python如何使用fileinput读取文件,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!fileinput 是 Python 的内置模块,但我相信,不少人对它都是陌生的。今天我把 fileinpu...
    99+
    2023-06-14
  • 如何使用ADO.NET Excel读取文件
    小编给大家分享一下如何使用ADO.NET Excel读取文件,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!在关系数据库提供的各种对象中(表、视图、存储过程等),E...
    99+
    2023-06-17
  • 教你用十行node.js代码读取docx的文本
    前言 最近有一个case。需要去解析word文档。有两个需求,一个是将word文档转成PDF,一个是将word文档中的内容按照一定的规范读取到数据库中,去npm仓库找了大概有十几个包,发现主要是通过以下的方...
    99+
    2022-06-04
    教你用 文本 代码
  • 教你用Java GUI实现文本文件的读写
    目录一、实验题目二、分析三、实现四、全部代码一、实验题目 二、分析 实验要求为: 实现一个界面,界面中包含一个文本显示区和两个按钮(存档和读档) 读档按钮作用是打...
    99+
    2022-11-12
  • 如何使用@PropertySource读取配置文件
    本篇内容主要讲解“如何使用@PropertySource读取配置文件”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用@PropertySource读取配置文件”吧!@PropertySou...
    99+
    2023-06-29
  • 教你使用Python从文件中提取IP地址
    目录算法 :  代码输出 :代码:输出 :补充:python提取一段字符串中的ip地址总结让我们看看如何使用 Python 从文件中提取 IP 地址。 算法 :&...
    99+
    2022-11-11
  • 用 NumPy 轻松读取文件对象,你还在手动读取吗?
    在日常的数据分析和处理中,读取数据是必不可少的一步。而在 Python 中,读取数据的方式有很多种,其中最常见的方式就是使用文件对象进行读取。但是,手动读取文件对象不仅费时费力,而且容易出错。那么,有没有更加高效和简便的方式来读取文件对象...
    99+
    2023-11-04
    numy 文件 对象
  • python 使用fileinput读取文件
    目录1. 从标准输入中读取 2. 单独打开一个文件 3. 批量打开多个文件 4. 读取的同时备份文件 5. 标准输出重定向替换 6. 不得不介绍的方法 7. 进阶一点的玩法 8. 列...
    99+
    2022-11-11
  • 教你利用python如何读取txt中的数据
    目录前言方法一:运用open()函数方法二:使用numpy包的loadtxt方法方法三:使用pandas的read_table方法进行读取总结前言 当我们在用python时可能会遇到...
    99+
    2022-11-13
  • 如何用Ajax读取xml文件
    本篇内容介绍了“如何用Ajax读取xml文件”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2022-10-19
  • spring boot如何使用POI读取Excel文件
    目录spring boot 使用POI读取Excel文件Excel文件目录重要说明读取Excel文件获取sheet表格及读写单元格内容合并单元格SpringBoot解析Excel以批...
    99+
    2022-11-12
  • 如何使用pandas生成/读取csv文件
    这篇文章给大家分享的是有关如何使用pandas生成/读取csv文件的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。前言csv是我接触的比较早的一种文件,比较好的是这种文件既能够以电子表格的形式查看又能够以文本的形式...
    99+
    2023-06-20
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作