누구나 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/
답변
아니요. 브라우저 측 자바 스크립트는 많은 보안 옵션을 비활성화하지 않고 클라이언트 컴퓨터에 쓸 수있는 권한이 없습니다.
답변
미래가 여기 있습니다! 제안은 완성에 가까워지고 더 이상 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");
답변
JScript (Microsoft의 Javascript)를 사용하여 WSH (브라우저가 아님)를 사용하여 로컬 스크립팅을 수행하는 Scripting.FileSystemObject
경우 파일 시스템에 액세스 할 수 있습니다 .
많은 보안 설정을 끄면 IE에서 동일한 객체에 액세스 할 수 있다고 생각하지만 이는 매우 나쁜 생각입니다.
답변
현재 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 :
- 현재 Chromium 기반 브라우저 (Chrome & Opera)에서만 구현됩니다.
- W3C 표준 트랙에서 벗어 났으며 현재로서는 독점 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 라이브러리입니다. 이 녀석이 여기에 의해 관리됩니다 :).