1.HTML文件下(使用Live Server打开)
1.1 fetch
fetch('file.txt')
.then(response => {
if (!response.ok) {
throw new Error('Network response was not ok');
}
return response.text();
})
.then(text => {
// 处理读取到的文本数据
console.log(text);
})
.catch(error => {
console.error('There has been a problem with your fetch operation:', error);
});
1.2 XMLHttpRequest
const xhr = new XMLHttpRequest();
xhr.overrideMimeType("text/plain");
xhr.open('GET', 'file.txt', true);
xhr.onreadystatechange = function () {
if (xhr.readyState === 4 && xhr.status === 200) {
const text = xhr.responseText;
// 处理读取到的文本数据
console.log(text);
}
};
xhr.send(null);
1.3 Axios
<script src="https://cdn.bootcdn.net/ajax/libs/axios/1.3.6/axios.js"></script>
axios.get('file.txt')
.then(response => {
console.log(response.data);
})
.catch(error => {
console.error('Error reading the JSON file:', error);
});
1.4 FileReader
// HTML中添加input标签,用于选择文件
<input type="file" id="fileInput">
<script>
document.getElementById('fileInput').addEventListener('change', function(event) {
const file = event.target.files[0];
if (!file) {
console.error('No file selected');
return;
}
const reader = new FileReader();
reader.onload = function(event) {
const text = event.target.result;
// 处理读取到的文本数据
console.log(text);
};
reader.onerror = function(event) {
console.error('Error reading the file:', event.target.error);
};
reader.readAsText(file);
});
</script>
这段代码创建了一个FileReader对象,通过监听文件输入框的变化,当用户选择一个文件后,FileReader会读取文件内容并调用onload事件处理函数,在这个事件处理函数中,可以访问到读取的文本数据。
2.Node下
2.1 fs.readFile
使用 Node.js 的 fs 模块中的 readFile 方法可以读取文本文件的内容。这是一种异步方法,适用于小型文件。
const fs = require('fs');
fs.readFile('file.txt', 'utf8', (err, data) => {
if (err) {
console.error('Error reading the file:', err);
return;
}
console.log(data);
});
2.2 fs.readFileSync
readFileSync 是 fs 模块中的同步方法,适用于小型文件。这种方法会阻塞整个程序的执行,直到文件读取完成。
const fs = require('fs');
try {
const data = fs.readFileSync('file.txt', 'utf8');
console.log(data);
} catch (err) {
console.error('Error reading the file:', err);
}
2.3 readline 模块
readline 模块可以逐行读取文本文件,适用于大型文件,可以减少内存的占用。
const fs = require('fs');
const readline = require('readline');
const readStream = fs.createReadStream('file.txt', 'utf8');
const rl = readline.createInterface({
input: readStream,
crlfDelay: Infinity // 确保逐行读取,不会出现文本数据被截断或者分段的情况
});
rl.on('line', (line) => {
console.log(line);
});
rl.on('close', () => {
console.log('File reading finished');
});
2.4 stream
可以使用 Node.js 中的 stream,它可以逐块读取大型文件,降低内存占用。这种方法适合处理大型文件。
const fs = require('fs');
const readStream = fs.createReadStream('file.txt', 'utf8');
readStream.on('data', (chunk) => {
console.log(chunk);
});
readStream.on('end', () => {
console.log('File reading finished');
});
readStream.on('error', (err) => {
console.error('Error reading the file:', err);
});
3.拆分
const lines = text.split(/\r\n|\n|\r/); // 使用正则表达式分割文本
// 遍历每一行内容
lines.forEach(line => {
console.log(line);
});
// 遍历每一行内容
lines.forEach(line => {
// 根据空格拆分每一行内容
const words = line.split(' ');
// 输出每一行拆分后的单词数组
console.log(words);
});
在 JavaScript 的 forEach 方法中,使用 return 无法像普通的 for 循环那样跳出循环。return 在 forEach 中只是用于退出当前迭代函数,并不能终止整个循环。
如果想在某些条件下跳过当前迭代,可以使用 return 来继续下一次迭代,但无法完全中断 forEach 循环。