누구나 JavaScript를 사용하여 파일을 읽고 쓰는 샘플 코드를 줄 수 있습니까?
누구나 JavaScript를 사용하여 파일을 읽고 쓰는 샘플 코드를 줄 수 있습니까?
답변:
완벽을 기하기 위해 OP는 브라우저 에서이 작업을 수행하려고한다고 명시하지 않습니다 (말한 것처럼 일반적으로 불가능합니다)
그러나 자바 스크립트 자체가이를 허용합니다. 서버 측 자바 스크립트로 수행 할 수 있습니다.
Javascript File 클래스 에서이 설명서를 참조하십시오.
편집 : 그 링크는 이제 Oracle에 의해 옮겨진 Sun 문서에 대한 링크였습니다.
시간을 지키기 위해 FileSystem 클래스에 대한 node.js 문서가 있습니다. http://nodejs.org/docs/latest/api/fs.html
편집 (2) : HTML5를 사용하여 클라이언트 측에서 파일을 읽을 수 있습니다 : http://www.html5rocks.com/en/tutorials/file/dndfiles/
아니요. 브라우저 측 자바 스크립트는 많은 보안 옵션을 비활성화하지 않고 클라이언트 컴퓨터에 쓸 수있는 권한이 없습니다.
This answer is not useful
입니다.
미래가 여기 있습니다! 제안은 완성에 가까워지고 더 이상 ActiveX 또는 플래시 또는 Java가 아닙니다. 이제 우리는 사용할 수 있습니다 :
끌어서 놓기를 사용하여 파일을 브라우저로 가져 오거나 간단한 업로드 컨트롤을 사용할 수 있습니다. 사용자가 파일을 선택하면 Javascript를 통해 읽을 수 있습니다. http://www.html5rocks.com/en/tutorials/file/dndfiles/
다음은 모질라 제안입니다
http://www-archive.mozilla.org/js/js-file-object.html
이것은 Spidermonkey와 Adobe의 extendscript에서 컴파일 스위치로 구현됩니다. 또한 Firefox 확장자로 File 객체를 얻습니다.
코뿔소에는 (소설적인) readFile 기능이 있습니다 https://developer.mozilla.org/en/Rhino_Shell
rhino에서보다 복잡한 파일 조작을 위해 java.io.File 메소드를 사용할 수 있습니다.
당신은 브라우저 에서이 물건을 얻지 못할 것입니다. 브라우저에서 유사한 기능을 수행하려면 HTML5, 클라이언트 측 지속성, 쿠키 및 플래시 스토리지 오브젝트의 SQL 데이터베이스 기능을 사용할 수 있습니다.
이 Javascript 기능은 브라우저를 통해이를 실행하는 사용자에게 완전한 "다른 이름으로 저장"대화 상자를 제공합니다. 사용자가 OK를 누르면 파일이 저장됩니다.
편집 : 다음 코드는 Firefox 및 Chrome 에서이 코드를 보안 문제로 간주하여 작동하지 못하도록 IE 브라우저에서만 작동합니다.
// 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");
현재 File , FileWriter 및 FileSystem API 를 사용하여 브라우저 탭 / 창의 컨텍스트에서 파일을 읽고 읽을 수 있지만 사용에 대한주의 사항이 있습니다 (이 답변의 꼬리 부분 참조).
그러나 귀하의 질문에 대답하려면 :
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){}
});
원시 파일, 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);
바로 당신이 뭘 바랐나요? 그럴 수도 있고 아닐 수도 있고. 후자의 두 API :
또한 FileSystem 스펙은 디렉토리 구조가 디스크에 표시되는 방법에 대한 지침을 정의하지 않습니다. 예를 들어 Chromium 기반 브라우저에서 샌드 박스에는 가상 파일 시스템 (브라우저 내에서 액세스 할 때와 동일한 형식으로 디스크에 반드시 존재하지 않아도되는 디렉토리 구조)이 있으며이 디렉토리 내에서 API가 배치됩니다.
따라서 API를 사용하여 시스템에 파일을 쓸 수는 있지만 API없이 파일을 찾는 경우 (FileSystem API가없는 경우) 사소한 일이 될 수 있습니다.
이러한 문제 / 제한 사항을 처리 할 수 있다면 이러한 API는 요청한 것을 수행하는 유일한 기본 방법입니다.
네이티브가 아닌 솔루션을 사용하는 경우 Silverlight를 사용하면 IsolatedStorage를 통해 탭 / 창 컨테스트에서 파일 I / O를 허용 할 수도 있습니다 . 그러나이 기능을 사용하려면 관리 코드 가 필요합니다. 이러한 코드를 작성해야하는 솔루션은이 질문의 범위를 벗어납니다.
물론 보완적인 관리 코드를 사용하고 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는 사용자 지정 파일을 읽을 수 있습니다. File API를 사용한 파일 읽기에 대한 자세한 내용은 Eric Bidelman의 블로그 를 참조하십시오 . 그러나 브라우저 기반 Javascript는 일부 웹 사이트가 로컬 파일 시스템을 임의로 변경하는 보안 위협으로 간주되기 때문에 일부 보안 설정을 비활성화하지 않고 로컬 컴퓨터의 파일 시스템을 쓸 수 없습니다.
말하자면, 당신이하려는 일에 따라 그것을 해결할 수있는 몇 가지 방법이 있습니다.
자신의 사이트 인 경우 웹 페이지에 Java 애플릿을 포함시킬 수 있습니다. 그러나 방문자는 로컬 시스템에 Java를 설치해야하며 보안 위험에 대해 경고합니다. 방문자는 애플릿을로드 할 수 있어야합니다. Java 애플릿은 로컬 컴퓨터에 완전히 액세스 할 수있는 실행 소프트웨어와 같습니다.
Chrome은 로컬 파일 시스템의 샌드 박스 부분 인 파일 시스템을 지원합니다. 자세한 내용은 이 페이지 를 참조하십시오. 이를 통해 일시적으로 항목을 로컬로 저장할 수 있습니다. 그러나 다른 브라우저에서는이 기능을 지원하지 않습니다.
브라우저에만 국한되지 않으면 Node.js에는 완전한 파일 시스템 인터페이스가 있습니다. 파일 시스템 설명서 는 여기를 참조하십시오 . Node.js는 서버뿐만 아니라 Windows를 포함한 모든 클라이언트 컴퓨터에서도 실행될 수 있습니다. 자바 스크립트 테스트 러너 Karma는 Node.js를 기반으로합니다. 로컬 컴퓨터에서 자바 스크립트로 프로그래밍하려는 경우 옵션입니다.
파일을 만들려면
function makefile(){
var fso;
var thefile;
fso = new ActiveXObject("Scripting.FileSystemObject");
thefile=fso.CreateTextFile("C:\\tmp\\MyFile.txt",true);
thefile.close()
}
Windows는 C 드라이브에 "tmp"라는 폴더를 작성하는 등 웹 쓰기에 대한 보안이 있으므로 C 드라이브에 디렉토리를 작성하십시오.
다음은 크롬 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를 저장 하는 것이 좋습니다.