Quero gravar dados em um arquivo existente usando JavaScript. Não quero imprimi-lo no console. Quero realmente gravar dados para abc.txt
. Eu li muitas perguntas respondidas, mas em todos os lugares onde elas estão imprimindo no console. em algum lugar eles deram código, mas não está funcionando. Então, por favor, alguém pode me ajudar Como realmente gravar dados em arquivo.
Consultei o código, mas não está funcionando: está dando erro:
Uncaught TypeError: Construtor ilegal
no cromo e
SecurityError: a operação é insegura.
no Mozilla
var f = "sometextfile.txt";
writeTextFile(f, "Spoon")
writeTextFile(f, "Cheese monkey")
writeTextFile(f, "Onion")
function writeTextFile(afilename, output)
{
var txtFile =new File(afilename);
txtFile.writeln(output);
txtFile.close();
}
Então, podemos realmente gravar dados em um arquivo usando apenas Javascript ou NÃO?
javascript
html
pareshm
fonte
fonte
Respostas:
Algumas sugestões para isso -
fonte
Você pode criar arquivos no navegador usando
Blob
eURL.createObjectURL
. Todos os navegadores recentes suportam isso .Você não pode salvar diretamente o arquivo criado, pois isso causaria grandes problemas de segurança, mas você pode fornecê-lo como um link de download para o usuário. Você pode sugerir um nome de arquivo por meio do
download
atributo do link, em navegadores que suportam o atributo de download. Como em qualquer outro download, o usuário que baixar o arquivo terá a palavra final no nome do arquivo.Aqui está um exemplo que usa essa técnica para salvar texto arbitrário de a
textarea
.Se você deseja iniciar imediatamente o download em vez de exigir que o usuário clique em um link, pode usar eventos do mouse para simular um clique do mouse no link, como fez a resposta do Lifecube . Eu criei um exemplo atualizado que usa essa técnica.
fonte
URL
). A configuração do nome do arquivo não funcionará no Safari porque ainda não implementou odownload
atributo .\n
para representar novas linhas, como os programas UNIX. Você provavelmente o está visualizando em um programa do Windows, como o Bloco de Notas, que não processa o\n
caractere como uma nova linha . Se você deseja que as novas linhas sejam renderizadas corretamente no Bloco de notas e em alguns outros programas do Windows, antes de colocar o texto naBlob
substituição, substitua cada um\n
por\r\n
:text = text.replace(/\n/g, '\r\n')
.mouseover
link, mas dependendo de quanto processamento ele está fazendo e que pode não funcionar muito bem.Se você estiver falando sobre javascript do navegador, não poderá gravar dados diretamente no arquivo local por motivos de segurança. A nova API do HTML 5 pode permitir apenas a leitura de arquivos.
Mas se você deseja gravar dados, e permitir que o usuário faça o download como um arquivo para o local. o seguinte código funciona:
para usá-lo:
download('the content of the file', 'filename.txt', 'text/plain');
fonte
A resposta acima é útil, mas encontrei o código que ajuda você a baixar o arquivo de texto diretamente no clique do botão. Nesse código, você também pode alterar
filename
como desejar. É pura função javascript com HTML5. Funciona para mim!fonte
createObjectURL
. Diferentemente da maioria das coisas em JS, os objetos que você cria com ela não são automaticamente coletados como lixo quando não há mais referências a eles; eles são apenas lixo coletado quando a página é fechada. Como você não está usandoURL.revokeObjectURL()
este código para liberar a memória usada pela última chamada, há um vazamento de memória; se o usuário ligarsaveTextFile
várias vezes, continuará consumindo mais e mais memória porque você nunca a liberou.Experimentar
fonte
No caso de não ser possível usar a nova
Blob
solução, que é com certeza a melhor solução no navegador moderno, ainda é possível usar essa abordagem mais simples, que tem um limite no tamanho do arquivo a propósito:fonte
Use o código do usuário @ useless-code acima ( https://stackoverflow.com/a/21016088/327386 ) para gerar o arquivo. Se você deseja baixar o arquivo automaticamente, passe o
textFile
que acabou de ser gerado para esta função:fonte
Encontrei boas respostas aqui, mas também encontrei uma maneira mais simples.
O botão para criar o blob e o link de download pode ser combinado em um link, pois o elemento link pode ter um atributo onclick. (O inverso parece não ser possível, adicionar um href a um botão não funciona.)
Você pode estilizar o link como um botão usando
bootstrap
, que ainda é javascript puro, exceto pelo estilo.A combinação do botão e do link de download também reduz o código, pois menos desses são feios
getElementById
são necessárias chamadas .Este exemplo precisa de apenas um botão para criar o blob de texto e fazer o download:
fonte
Sim, é possível Aqui o código é
fonte