String a = new String("foo");
String b = new String("foo");
System.out.println(a == b); // prints false
System.out.println(a.equals(b)); // prints true
Убедитесь, что вы понимаете, почему. Это потому, что сравнение ==
сравнивает только ссылки; equals()
метод сопоставляет содержимое по символу.
Когда вы вызываете new для a
и b
, каждый получает новую ссылку, указывающую на "foo"
в таблице строк. Ссылки разные, но контент один и тот же.
Вы не можете делать это исключительно в Javascript.
Вместо этого я бы рекомендовал использовать Downloadify :
Крошечная библиотека javascript + Flash, которая позволяет создавать и скачивать текстовые файлы без взаимодействия с сервером.
blockquote>Здесь вы можете увидеть простую демонстрацию здесь , где вы поставляете контент, и можете проверить функциональность сохранения / отмены / обработки ошибок.
Javascript имеет API файловой системы. Если вы можете иметь дело с тем, что функция работает только в Chrome, хорошей отправной точкой будет: http://www.html5rocks.com/en/tutorials/file/filesystem/ .
function download(text, name, type) {
var a = document.getElementById("a");
var file = new Blob([text], {type: type});
a.href = URL.createObjectURL(file);
a.download = name;
}
<a href="" id="a">click here to download your file</a>
<button onclick="download('file text', 'myfilename.txt', 'text/plain')">Create file</button>
И вы затем загрузите файл, поместив атрибут загрузки в тег привязки.
Причина, по которой я как это лучше, чем создание URL-адреса данных, так это то, что вам не нужно делать большой длинный URL-адрес, вы можете просто создать временный URL-адрес.
if("URL"in window&&"createObjectURL"in URL&&"download"in Element.prototype)
: иначе вы просто измените способ загрузки или заметите, что браузер не поддерживает необходимые объекты для загрузки файла.
– hydroper
20 January 2016 в 23:24
javascript:function download(text, name, type) { var a = document.getElementById("content"); var file = new Blob([text], {type: type}); a.href = URL.createObjectURL(file); a.download = name; }
– Jeno
1 April 2016 в 10:03
var a = document.createElement("a")
должен находиться в ветви else
, иначе IE10 + создаст, но не удалит элемент привязки (<a>
).
– Andrew Willems
22 January 2017 в 22:12
Пробовал это в консоли, и он работает.
var aFileParts = ['<a id="a"><b id="b">hey!</b></a>'];
var oMyBlob = new Blob(aFileParts, {type : 'text/html'}); // the blob
window.open(URL.createObjectURL(oMyBlob));
Этот проект в github выглядит многообещающим:
https://github.com/eligrey/FileSaver.js
FileSaver.js реализует интерфейс W3C saveAs () FileSaver в браузерах, которые его не поддерживают.
blockquote>Также посмотрите здесь демо:
Выбор местоположения для сохранения файла перед его созданием невозможен. Но возможно, по крайней мере в Chrome, генерировать файлы, используя только JavaScript. Вот старый пример создания CSV-файла. Пользователю будет предложено загрузить его. Это, к сожалению, плохо работает в других браузерах, особенно IE.
<!DOCTYPE html>
<html>
<head>
<title>JS CSV</title>
</head>
<body>
<button id="b">export to CSV</button>
<script type="text/javascript">
function exportToCsv() {
var myCsv = "Col1,Col2,Col3\nval1,val2,val3";
window.open('data:text/csv;charset=utf-8,' + escape(myCsv));
}
var button = document.getElementById('b');
button.addEventListener('click', exportToCsv);
</script>
</body>
</html>
Для последнего браузера, такого как Chrome, вы можете использовать API-интерфейс , как в этом учебнике :
window.requestFileSystem = window.requestFileSystem || window.webkitRequestFileSystem;
window.requestFileSystem(window.PERSISTENT, 5*1024*1024 /*5MB*/, saveFile, errorHandler);
setTimeout("create('Hello world!', 'myfile.txt', 'text/plain')");
function create(text, name, type) {
var dlbtn = document.getElementById("dlbtn");
var file = new Blob([text], {type: type});
dlbtn.href = URL.createObjectURL(file);
dlbtn.download = name;
}
<a href="javascript:void(0)" id="dlbtn"><button>click here to download your file</button></a>
Для Chrome и Firefox я использую только метод JavaScript.
(Мое приложение не может использовать пакет, такой как Blob.js
, потому что он обслуживается специальным движком: DSP с
function FileSave(sourceText, fileIdentity) {
var workElement = document.createElement("a");
if ('download' in workElement) {
workElement.href = "data:" + 'text/plain' + "charset=utf-8," + escape(sourceText);
workElement.setAttribute("download", fileIdentity);
document.body.appendChild(workElement);
var eventMouse = document.createEvent("MouseEvents");
eventMouse.initMouseEvent("click", true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
workElement.dispatchEvent(eventMouse);
document.body.removeChild(workElement);
} else throw 'File saving not supported for this browser';
}
Примечания, оговорки и ласковые слова:
sourceText
больше, чем MB, Chrome иногда (только иногда) застревает в его собственная загрузка без указания отказа; До сих пор Firefox не демонстрировал такого поведения. Причиной может быть некоторое ограничение blob в Chrome. Честно говоря, я просто не знаю; если у кого-нибудь есть идеи по исправлению (или, по крайней мере, обнаружению), отправьте сообщение. Если возникает аномалия загрузки, когда браузер Chrome закрыт, он генерирует диагностику, такую как