Existe um modo de ler arquivos MP3 e salva-los em outro diretorio.
Pesquisei no google quase todo o exemplos com txt tentei usa-los com mp3
mas os arquivos que salvei todos se danificaram.
Desde já agradeço.
[quote=Daniel.F]Existe um modo de ler arquivos MP3 e salva-los em outro diretorio.
Pesquisei no google quase todo o exemplos com txt tentei usa-los com mp3
mas os arquivos que salvei todos se danificaram.
Desde já agradeço.[/quote]
Vc não precisa ler o arquivo para o copiar.
Vc precisa u sar a classe File que é uma referencia ao arquivo.
Para mover o arquivo basta usar o metodo rename dessa classe.
Para criar um outro arquivo em outro lugar vc precisa usar as classes FileInputStream e FileOutputStream
(ou a API de canais) para fazer a copia.
Mas o problema que eu não coloquei é que este arquivo
será serializado via soket.
Portanto acho que referencia ao arquivo será perdida.
Procura sobre o pacote java.nio (Acho que tem algo nos artigos do GUJ)
Vera que é muita mais fáçil fazer isso.
O codigo abaixo faz a copia de qualquer arquivo para qualquer diretorio que você queira !
public boolean gravar(InputStream in, String fileName) throws Exception{
boolean gravado = false;
String destino = "C://";
try {
BufferedInputStream bufferIn = new BufferedInputStream(in);
File file = new File(destino + fileName);
file.createNewFile();
OutputStream bos = new FileOutputStream(file);
int teste = 0;
while ((teste = bufferIn.read()) != -1) {
bos.write(teste);
}
in.close();
bufferIn.close();
bos.close();
gravado = true;
} catch (Exception e) {
throw new Exception(getClass().getSimpleName() + " : " + e.getMessage());
}
return gravado;
}
Onde a variavel (String destino = “C://”; ) corresponde ao diretorio !
[quote=Daniel.F]Mas o problema que eu não coloquei é que este arquivo
será serializado via soket.
Portanto acho que referencia ao arquivo será perdida.[/quote]
Você tem que copiar o arquivo para o socket em uma máquina. E na outra máquina copiar do soket para o arquivo.
A operação de copia pode ser feita assim:
public static void copy(InputStream in , OutputStream out) throws IOException{
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
}
Esta versão funciona, mas não é muito eficiente. Uma versão usando Channel seria melhor.
O ponto é que vc tem um método para copiar entre um input e um output.
No codigo da máquina que envia o arquivo
File file = new File("caminho/para/o/arquivo/de/origem");
Socket socket = ...
copy(new FileInputStream(file), socket.getOutputStream());
no codigo da máquina que recebe
File file = new File("caminho/para/o/arquivo/de/destino");
Socket socket = ...
copy(socket.getInputStream(),new FileOutputStream(file));
É só isso, mas vc tem que entender o conceito de Stream e a diferença entre um inputStream e um outputStream.
Eu não estou casa agora vou tentar todas essas alternativas eu agradeço muito .
Mas se não me engano InputStream é abstrata
como eu vou instancia-la?
[quote=Daniel.F]Eu não estou casa agora vou tentar todas essas alternativas eu agradeço muito .
Mas se não me engano InputStream é abstrata
como eu vou instancia-la?[/quote]
Não precisa. Vc obtem uma instancia do socket ou usando FileInputStrem().
Tinha me esquecido que FileInputStream é subclasse de
InputStream