ใครสามารถให้รหัสตัวอย่างในการอ่านและเขียนไฟล์โดยใช้ JavaScript?
ใครสามารถให้รหัสตัวอย่างในการอ่านและเขียนไฟล์โดยใช้ JavaScript?
คำตอบ:
เพื่อความสมบูรณ์ OP ไม่ได้ระบุว่าเขาต้องการทำสิ่งนี้ในเบราว์เซอร์ (ถ้าเป็นตามที่ระบุไว้โดยทั่วไปไม่สามารถทำได้)
อย่างไรก็ตามจาวาสคริปต์ต่อ se อนุญาตนี้; มันสามารถทำได้ด้วยจาวาสคริปต์ฝั่งเซิร์ฟเวอร์
ดูเอกสารนี้ในคลาสไฟล์ Javascript
แก้ไข : ลิงค์นั้นไปยังเอกสาร Sun ที่ Oracle ถูกย้ายไปแล้ว
เพื่อให้ทันกับเอกสารของ node.js สำหรับคลาส FileSystem: http://nodejs.org/docs/latest/api/fs.html
แก้ไข (2) : คุณสามารถอ่านไฟล์ไคลเอนต์ตอนนี้ด้วย HTML5: http://www.html5rocks.com/en/tutorials/file/dndfiles/
ไม่จาวาสคริปต์ทางเบราว์เซอร์ไม่ได้รับอนุญาตให้เขียนลงในเครื่องไคลเอนต์โดยไม่มีตัวเลือกความปลอดภัยจำนวนมากที่ต้องถูกปิดใช้งาน
This answer is not useful
ข้อความคำแนะนำเครื่องมือของมันคือ
อนาคตอยู่ที่นี่! ข้อเสนอใกล้จะเสร็จสมบูรณ์ไม่มี ActiveX หรือแฟลชหรือจาวาอีกต่อไป ตอนนี้เราสามารถใช้:
คุณสามารถใช้ลาก / วางเพื่อนำไฟล์ไปไว้ในเบราว์เซอร์หรือควบคุมการอัปโหลดอย่างง่าย เมื่อผู้ใช้เลือกไฟล์แล้วคุณสามารถอ่านได้ด้วย Javascript: http://www.html5rocks.com/th/tutorials/file/dndfiles/
นี่คือข้อเสนอโมซิลล่า
http://www-archive.mozilla.org/js/js-file-object.html
สิ่งนี้ถูกนำมาใช้กับสวิตช์รวบรวมใน spidermonkey และใน adobe extendscript นอกจากนี้ (ฉันคิดว่า) คุณจะได้รับวัตถุไฟล์ในส่วนขยายของ Firefox
แรดมีฟังก์ชั่น readFile (ค่อนข้างหยาบคาย) https://developer.mozilla.org/en/Rhino_Shell
สำหรับการดำเนินงานไฟล์ที่ซับซ้อนมากขึ้นในแรดคุณสามารถใช้วิธี java.io.File
คุณจะไม่ได้รับสิ่งนี้ในเบราว์เซอร์ สำหรับฟังก์ชั่นที่คล้ายกันในเบราว์เซอร์คุณสามารถใช้ฟังก์ชั่นฐานข้อมูล SQL จาก HTML5 การคงอยู่ของลูกค้าคุกกี้และวัตถุที่จัดเก็บแฟลช
ฟังก์ชัน Javascript นี้แสดงกล่องโต้ตอบ "บันทึกเป็น" ที่สมบูรณ์ให้กับผู้ใช้ที่เรียกใช้ผ่านเบราว์เซอร์ ผู้ใช้กดตกลงและไฟล์จะถูกบันทึก
แก้ไข: รหัสต่อไปนี้ใช้งานได้เฉพาะกับเบราว์เซอร์ IE เนื่องจาก Firefox และ Chrome ถือว่ารหัสนี้เป็นปัญหาด้านความปลอดภัยและได้ปิดกั้นไม่ให้ทำงาน
// content is the data you'll write to file<br/>
// filename is the filename<br/>
// what I did is use iFrame as a buffer, fill it up with text
function save_content_to_file(content, filename)
{
var dlg = false;
with(document){
ir=createElement('iframe');
ir.id='ifr';
ir.location='about.blank';
ir.style.display='none';
body.appendChild(ir);
with(getElementById('ifr').contentWindow.document){
open("text/plain", "replace");
charset = "utf-8";
write(content);
close();
document.charset = "utf-8";
dlg = execCommand('SaveAs', false, filename+'.txt');
}
body.removeChild(ir);
}
return dlg;
}
เรียกใช้ฟังก์ชัน:
save_content_to_file("Hello", "C:\\test");
หากคุณกำลังใช้ JScript (Javascript ของ Microsoft) เพื่อทำสคริปต์ท้องถิ่นโดยใช้ WSH (ไม่ใช่ในเบราว์เซอร์!) คุณสามารถใช้ Scripting.FileSystemObject
เพื่อเข้าถึงระบบไฟล์
ฉันคิดว่าคุณสามารถเข้าถึงวัตถุเดียวกันนั้นใน IE ได้หากคุณปิดการตั้งค่าความปลอดภัยจำนวนมาก แต่นั่นเป็นความคิดที่แย่มาก ๆ
hta
แอปพลิเคชันและแก้ปัญหาได้
ขณะนี้ไฟล์สามารถเขียนและอ่านได้จากบริบทของแท็บ / หน้าต่างเบราว์เซอร์ด้วยFile , FileWriterและFileSystem APIs แม้ว่าจะมีข้อควรระวังในการใช้งาน (ดูส่วนท้ายของคำตอบนี้)
แต่เพื่อตอบคำถามของคุณ:
ใช้BakedGoods *
เขียนไฟล์:
bakedGoods.set({
data: [{key: "testFile", value: "Hello world!", dataFormat: "text/plain"}],
storageTypes: ["fileSystem"],
options: {fileSystem:{storageType: Window.PERSISTENT}},
complete: function(byStorageTypeStoredItemRangeDataObj, byStorageTypeErrorObj){}
});
อ่านไฟล์:
bakedGoods.get({
data: ["testFile"],
storageTypes: ["fileSystem"],
options: {fileSystem:{storageType: Window.PERSISTENT}},
complete: function(resultDataObj, byStorageTypeErrorObj){}
});
การใช้ไฟล์ raw, FileWriter และ FileSystem API
เขียนไฟล์:
function onQuotaRequestSuccess(grantedQuota)
{
function saveFile(directoryEntry)
{
function createFileWriter(fileEntry)
{
function write(fileWriter)
{
var dataBlob = new Blob(["Hello world!"], {type: "text/plain"});
fileWriter.write(dataBlob);
}
fileEntry.createWriter(write);
}
directoryEntry.getFile(
"testFile",
{create: true, exclusive: true},
createFileWriter
);
}
requestFileSystem(Window.PERSISTENT, grantedQuota, saveFile);
}
var desiredQuota = 1024 * 1024 * 1024;
var quotaManagementObj = navigator.webkitPersistentStorage;
quotaManagementObj.requestQuota(desiredQuota, onQuotaRequestSuccess);
อ่านไฟล์:
function onQuotaRequestSuccess(grantedQuota)
{
function getfile(directoryEntry)
{
function readFile(fileEntry)
{
function read(file)
{
var fileReader = new FileReader();
fileReader.onload = function(){var fileData = fileReader.result};
fileReader.readAsText(file);
}
fileEntry.file(read);
}
directoryEntry.getFile(
"testFile",
{create: false},
readFile
);
}
requestFileSystem(Window.PERSISTENT, grantedQuota, getFile);
}
var desiredQuota = 1024 * 1024 * 1024;
var quotaManagementObj = navigator.webkitPersistentStorage;
quotaManagementObj.requestQuota(desiredQuota, onQuotaRequestSuccess);
สิ่งที่คุณขอใช่ไหม อาจจะอาจจะไม่. APIs สองรายการหลัง:
นอกจากนี้ข้อมูลจำเพาะของ FileSystem ยังไม่ได้กำหนดแนวทางในการที่โครงสร้างไดเรกทอรีจะปรากฏบนดิสก์ ในเบราว์เซอร์ที่ใช้ Chromium แซนด์บ็อกซ์มีระบบไฟล์เสมือน (โครงสร้างไดเรกทอรีซึ่งไม่จำเป็นต้องมีอยู่ในดิสก์ในรูปแบบเดียวกับที่มันทำเมื่อเข้าถึงจากภายในเบราว์เซอร์) ซึ่งมีไดเรกทอรีและไฟล์ที่สร้างขึ้นด้วย มีการวาง API
ดังนั้นแม้ว่าคุณอาจจะสามารถเขียนไฟล์ไปยังระบบที่มี API ได้ แต่การค้นหาไฟล์ที่ไม่มี API (อาจจะไม่มี FileSystem API) อาจเป็นเรื่องที่ไม่สำคัญ
หากคุณสามารถจัดการกับปัญหา / ข้อ จำกัด เหล่านี้ได้ API เหล่านี้เป็นวิธีเดียวในการทำสิ่งที่คุณถาม
หากคุณกำลังเปิดเพื่อแก้ปัญหาที่ไม่ใช่เจ้าของภาษา Silverlight ยังช่วยให้ไฟล์ I / O จากการประกวดแท็บ / หน้าต่างผ่านIsolatedStorage อย่างไรก็ตามรหัสที่ได้รับการจัดการจะต้องใช้สิ่งอำนวยความสะดวกนี้ โซลูชันที่ต้องการเขียนโค้ดดังกล่าวอยู่นอกเหนือขอบเขตของคำถามนี้
แน่นอนวิธีการแก้ปัญหาที่ใช้ประโยชน์จากการจัดการรหัสเสริมทิ้งไว้กับ Javascript เท่านั้นที่จะเขียนได้ดีภายในขอบเขตของคำถามนี้;):
//Write file to first of either FileSystem or IsolatedStorage
bakedGoods.set({
data: [{key: "testFile", value: "Hello world!", dataFormat: "text/plain"}],
storageTypes: ["fileSystem", "silverlight"],
options: {fileSystem:{storageType: Window.PERSISTENT}},
complete: function(byStorageTypeStoredItemRangeDataObj, byStorageTypeErrorObj){}
});
* BakedGoods เป็นห้องสมุด Javascript ที่สร้างอินเตอร์เฟสที่เหมือนกันซึ่งสามารถใช้ในการดำเนินการจัดเก็บข้อมูลทั่วไปในเนทีฟทั้งหมดและหน่วยเก็บข้อมูลที่ไม่ใช่เจ้าของภาษา มันถูกดูแลโดยชายคนนี้ที่นี่:)
สำหรับ Firefox:
var file = Components.classes["@mozilla.org/file/local;1"].
createInstance(Components.interfaces.nsILocalFile);
file.initWithPath("/home");
ดูhttps://developer.mozilla.org/en-US/docs/Code_snippets/File_I_O
สำหรับคนอื่น ๆ ลองใช้แอพTiddlyWikiเพื่อดูว่ามันทำงานอย่างไร
ในบริบทของเบราว์เซอร์ Javascript สามารถอ่านไฟล์ที่ผู้ใช้ระบุ ดูบล็อกของ Eric Bidelmanสำหรับรายละเอียดเกี่ยวกับการอ่านไฟล์โดยใช้ File API อย่างไรก็ตามมันเป็นไปไม่ได้ที่ Javascript บนเบราว์เซอร์จะเขียนระบบไฟล์ของเครื่องคอมพิวเตอร์โดยไม่ต้องปิดการใช้งานการตั้งค่าความปลอดภัยเพราะถือเป็นภัยคุกคามด้านความปลอดภัยสำหรับเว็บไซต์ใด ๆ ที่จะเปลี่ยนระบบไฟล์ภายในเครื่องของคุณเอง
การพูดว่ามีวิธีการแก้ไขโดยขึ้นอยู่กับสิ่งที่คุณพยายามทำ:
หากเป็นเว็บไซต์ของคุณเองคุณสามารถฝัง Java Applet ในหน้าเว็บ อย่างไรก็ตามผู้เข้าชมจะต้องติดตั้ง Java บนเครื่องท้องถิ่นและจะได้รับการแจ้งเตือนเกี่ยวกับความเสี่ยงด้านความปลอดภัย ผู้เยี่ยมชมจะต้องอนุญาตให้โหลดแอปเพล็ต Java Applet เปรียบเสมือนซอฟต์แวร์ที่สามารถใช้งานได้ซึ่งมีการเข้าถึงคอมพิวเตอร์ในพื้นที่ได้อย่างสมบูรณ์
Chrome สนับสนุนระบบไฟล์ซึ่งเป็นส่วนที่ถูกแซนด์บ็อกซ์ของระบบไฟล์ในเครื่อง ดูหน้านี้สำหรับรายละเอียด สิ่งนี้ช่วยให้คุณสามารถบันทึกสิ่งต่างๆในพื้นที่ได้ชั่วคราว อย่างไรก็ตามเบราว์เซอร์อื่นนี้ไม่รองรับ
หากคุณไม่ จำกัด เบราว์เซอร์ Node.js จะมีส่วนต่อประสานระบบไฟล์ที่สมบูรณ์ ดูที่นี่สำหรับเอกสารของระบบไฟล์ โปรดทราบว่า Node.js สามารถทำงานได้ไม่เพียงบนเซิร์ฟเวอร์ แต่ยังรวมถึงคอมพิวเตอร์ไคลเอนต์ใด ๆ รวมถึงหน้าต่างด้วย นักวิ่งทดสอบ javascript Karma นั้นสร้างจาก Node.js หากคุณต้องการโปรแกรมใน javascript บนเครื่องคอมพิวเตอร์นี่เป็นตัวเลือก
เพื่อสร้างไฟล์ลอง
function makefile(){
var fso;
var thefile;
fso = new ActiveXObject("Scripting.FileSystemObject");
thefile=fso.CreateTextFile("C:\\tmp\\MyFile.txt",true);
thefile.close()
}
สร้างไดเรกทอรีของคุณในไดรฟ์ C เพราะ windows มีความปลอดภัยจากการเขียนจากเว็บเช่นสร้างโฟลเดอร์ชื่อ "tmp" ในไดรฟ์ C
คุณไม่สามารถทำได้ด้วยวิธีข้ามเบราว์เซอร์ IE มีวิธีการเปิดใช้งานแอปพลิเคชั่น "ที่เชื่อถือได้" เพื่อใช้วัตถุ ActiveX เพื่ออ่าน / เขียนไฟล์ แต่มันน่าเสียดาย
หากคุณต้องการบันทึกข้อมูลผู้ใช้คุณจะต้องใช้คุกกี้เป็นส่วนใหญ่
จากการทดสอบ ReactJS รหัสต่อไปนี้เขียนไฟล์ได้สำเร็จ:
import writeJsonFile from 'write-json-file';
const ans = 42;
writeJsonFile('answer.txt', ans);
const json = {"answer": ans};
writeJsonFile('answer_json.txt', json);
ไฟล์ถูกเขียนไปยังไดเรกทอรีที่มีการทดสอบดังนั้นการเขียนไฟล์ JSON จริง '* .json' จะสร้างลูป!
คุณไม่สามารถทำไฟล์ i / o ทางฝั่งไคลเอ็นต์โดยใช้ javascript เนื่องจากอาจมีความเสี่ยงด้านความปลอดภัย คุณต้องดาวน์โหลดและเรียกใช้ exe หรือหากไฟล์อยู่บนเซิร์ฟเวอร์ของคุณให้ใช้ AJAX และภาษาฝั่งเซิร์ฟเวอร์เช่น PHP เพื่อทำ i / o บนเซิร์ฟเวอร์
มีสองวิธีในการอ่านและเขียนไฟล์โดยใช้ JavaScript
ใช้ส่วนขยาย JavaScript
การใช้เว็บเพจและวัตถุ X
นี่คือโซลูชันการเขียนสำหรับ chrome v52 + (ผู้ใช้ยังคงต้องเลือกปลายทาง ... ) ที่
มา: StreamSaver.js
<!-- load StreamSaver.js before streams polyfill to detect support -->
<script src="StreamSaver.js"></script>
<script src="https://wzrd.in/standalone/web-streams-polyfill@latest"></script>
const writeStream = streamSaver.createWriteStream('filename.txt')
const encoder = new TextEncoder
let data = 'a'.repeat(1024)
let uint8array = encoder.encode(data + "\n\n")
writeStream.write(uint8array) // must be uInt8array
writeStream.close()
เหมาะที่สุดสำหรับการเขียนข้อมูลขนาดใหญ่ที่สร้างขึ้นบนฝั่งไคลเอ็นต์
มิฉะนั้นฉันขอแนะนำให้ใช้FileSaver.jsเพื่อบันทึก Blob / Files