Olá pessoal, tudo bem?
Gostaria de saber como eu faço pra salvar um arquivo no Java.
Este arquivo poderá ser de qualquer tipo (doc, xls, ppt, txt, mp3, etc).
Olá pessoal, tudo bem?
Gostaria de saber como eu faço pra salvar um arquivo no Java.
Este arquivo poderá ser de qualquer tipo (doc, xls, ppt, txt, mp3, etc).
E de onde esse arquivo virá?
Geralmente, basta abrir um Writer ou um Stream e escrever os bytes do arquivo. Para BufferedImages, existe a classe ImageIO que salva imagens em diversos formatos.
O arquivo virá a partir de uma seleção no JFileChooser.
Então vc já tem um arquivo salvo em outro lugar. E pretende salva-lo aonde?
Em um Banco de Dados.
Então vc quer copiar um arquivo de um lugar para outro??
Se for isso:
http://www.devmedia.com.br/articles/viewcomp.asp?comp=1209
até mais
[quote=eliangela]Então vc quer copiar um arquivo de um lugar para outro??
Se for isso:
http://www.devmedia.com.br/articles/viewcomp.asp?comp=1209
[/quote]
A melhor forma de copiar arquivos com o Java é com o FileChannel, não com Streams:
http://www.guj.com.br/posts/list/128689.java#693826
Como ele quer copiar do disco para um BD, é melhor ler isso aqui:
http://javafree.uol.com.br/artigo/851262/Manipulando-campos-BLOB-e-CLOB-com-JDBC.html
Como você vai gravar vários formatos no banco, não esqueça de criar uma coluna para dizer que formato é aquele dentro do blob. Caso contrário, ficará difícil ler o arquivo depois.
Eu preciso armazenar o arquivo em um campo do tipo Blob.
Leu os dois links que passei ali em cima?
Os links que vc passou estão mostrando como copiar imagens, certo?
Eu preciso copiar qualquer tipo de arquivo.
O princípio é o mesmo. Principalmente do segundo link, que usa um FileInputStream.
Diferentemente do MacOS 9 e anteriores (onde arquivos, conforme seu tipo, tinham um “resource fork” e tinham de ser tratados diferentemente), em todas as plataformas em que o Java roda atualmente - como o Unix/Linux, Windows, MacOSX e celulares) um FileInputStream / FileOutputStream serve para qualquer tipo de arquivo, mesmo os arquivos-texto.
A única diferença, é claro, é que o FileInputStream/FileOutputStream trata qualquer arquivo como bytes, enquanto o FileReader/FileWriter trata os arquivos como linhas de caracteres.
Estou recebendo o seguinte erro:
java.lang.ClassCastException: java.io.FileInputStream cannot be cast to java.sql.Blob
at hidro2.gov.snirh.ig.hidro.view.controller.descargaController.DescargaLiquidaAcusticoController.anexarArquivoAction(DescargaLiquidaAcusticoController.java:477)
at hidro2.gov.snirh.ig.hidro.view.adf.panel.SecaoMedicaoDescargaLiquidaAcusticoPanelEdit$2.actionPerformed(SecaoMedicaoDescargaLiquidaAcusticoPanelEdit.java:314)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6263)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:6028)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4630)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2475)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
meu código:
public void anexarArquivoAction() {
//limpa o campo caso já exista algum arquivo selecionado
iframe.getSecaoMedicaoDescargaLiquidaAcusticoPanelEdit1().getUploadTextField().setText(null);
// abre por default o "Meus Documentos"
abreDialogo = new JFileChooser();
abreDialogo.setDialogTitle("Abrir");
int retorno = 0;
retorno = abreDialogo.showOpenDialog(null);
SecaoMedicaoDescargaLiquidaAcusticoPanelEdit panel = iframe.getSecaoMedicaoDescargaLiquidaAcusticoPanelEdit1();
DCIteratorBinding dc = (DCIteratorBinding)panel.getPanelBinding().get(ITER_SEC_MEDICAO);
Row row = dc.getCurrentRow();
try {
//verifica se foi selecionado um arquivo
if (retorno == JFileChooser.APPROVE_OPTION) {
InputStream in = new FileInputStream(abreDialogo.getSelectedFile());
row.setAttribute("DmaNmArquivo", abreDialogo.getSelectedFile().getAbsolutePath());
row.setAttribute("DmaAqArquivo", in);
}
} catch (Exception ex) {
ex.printStackTrace();
panel.getPanelBinding().reportException(ex);
}
}