我在读取FTP中的.xml文件时遇到问题,并且出现以下消息:“ ftp:\ cifpag \ FilesNotes \ Maxdata_Venda_209016.XML(文件名,目录名或卷标签的语法不正确) ”,在代码中,此代码注释了已经完成的测试以及每个步骤中发生的事情,它遵循以下代码:
公共类ImportXmlFromFTP {
private static Connection conexao;
private String endereco_ftp;
private String usuario;
private String senha;
private String caminho_ftp;
private String caminho_local;
private String valor;
public ImportXmlFromFTP(){
}
public void inicia() throws SocketException, IOException, SQLException {
//DADOS CONEXAO
this.conexao = ConexaoBancoDeDados.getConexao();
String sql = "SELECT daea_endereco_ftp, daea_usuario, daea_senha, daea_caminho_ftp, daea_caminho_local FROM sistema.dados_envio_arquivos";
PreparedStatement stmtSelect = this.conexao.prepareStatement(sql);
ResultSet rs = stmtSelect.executeQuery();
List<DadosEnviaArquivos> listaCliente = new ArrayList<DadosEnviaArquivos>();
while(rs.next()){
DadosEnviaArquivos dados = new DadosEnviaArquivos();
endereco_ftp = rs.getString("daea_endereco_ftp");
usuario = rs.getString("daea_usuario");
senha = rs.getString("daea_senha");
caminho_ftp = rs.getString("daea_caminho_ftp");
caminho_local = rs.getString("daea_caminho_local");
}
//CONEXAO COM FTP
FTPClient ftp = new FTPClient();
ftp.connect(endereco_ftp);
ftp.login( usuario, senha );
ftp.changeWorkingDirectory (caminho_ftp);
//PASTA COM OS ARQUIVOS
int m = 0;
String nomeArquivo = "";
File caminhoParaFTP = new File(caminho_local + "/");
File arquivos[] = caminhoParaFTP.listFiles();
while (m != arquivos.length){
nomeArquivo = arquivos[m].getName();
FileInputStream arqEnviar = new FileInputStream(caminhoParaFTP + "/" + nomeArquivo);
//IMPORTA PARA O FTP
if (ftp.storeFile (nomeArquivo, arqEnviar)) {
System.out.println("Arquivo armazenado com sucesso!");
arqEnviar.close();
//APAGA ARQUIVO DA PASTA LOCAL
File file = new File(caminhoParaFTP+"/"+nomeArquivo);
file.delete();
m++;
}else{
System.out.println ("Erro ao armazenar o arquivo.");
}
}
ftp.disconnect();
//LER ARQUIVO DO FTP E IMPORTAR PARA O SISTEMA
//PEGAR PASTA FTP
classe_FTP ClienteFTP = new classe_FTP();
ClienteFTP.Conectar(endereco_ftp, usuario, senha, 21);
String caminho = caminho_ftp;
ArrayList<String> nomes=new ArrayList<String>();
FTPFile[] arquivosFTP = ClienteFTP.Dir(caminho);
if (arquivosFTP != null) {
int length = arquivosFTP.length;
for (int g = 0; g < length; ++g) {
FTPFile p = arquivosFTP[g];
if (p.isFile()) {
String arquivoNominal = p.getName();
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
try {
//BEGIN TESTES
FileInputStream stream = new FileInputStream("ftp:\\\\cifensa.com.br\\ArquivosNotas\\" + arquivoNominal);
//InputStream is = new FileInputStream("ftp:\\\\" +"\\\\cifensa.com.br//ArquivosNotas//" + arquivoNominal);
//InputStream stream = ftp.retrieveFileStream(p.getName());
//System.out.println("Caminho: "+stream.toString());
//END TO TESTE
Document doc = builder.parse(stream);
NodeList listaDeVenda = doc.getElementsByTagName("venda");
int tamanhoDaLista = listaDeVenda.getLength();
NodeList listaDeProdutos = doc.getElementsByTagName("item");
int tamanhoDaListaDeProdutos = listaDeProdutos.getLength();
for(int k = 0; k < tamanhoDaListaDeProdutos; k++){
Pedido pedido = new Pedido();
String slq = "INSERT INTO sistema.pedido(pedi_produto, pedi_quantidade, pedi_preco_unidade_produto, pedi_cliente, pedi_numero_documento, pedi_data_documento, pedi_cliente_cpf, " +
"pedi_numero_documento_fiscal, pedi_unidade, pedi_total_desconto_produto, pedi_valor_desconto_produto, pedi_porcetagem_desconto_produto, " +
"pedi_empresa, pedi_vendedor, pedi_operacao ) values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
PreparedStatement stmt = conexao.prepareStatement(slq);
Node noDeProdutos = listaDeProdutos.item(k);
if(noDeProdutos.getNodeType() == Node.ELEMENT_NODE){
Element elementoProduto = (Element) noDeProdutos;
NodeList listaNosFilhosProdutos = elementoProduto.getChildNodes();
int tamandoListaNosFilhosProdutos = listaNosFilhosProdutos.getLength();
for(int l = 0; l < tamandoListaNosFilhosProdutos; l++){
Node nosFilhoProdutos = listaNosFilhosProdutos.item(l);
if(nosFilhoProdutos.getNodeType() == Node.ELEMENT_NODE){
Element elementoNoProduto = (Element) nosFilhoProdutos;
switch(elementoNoProduto.getTagName()){
case "VDIPRONOME":
stmt.setString(1, elementoNoProduto.getTextContent());
break;
case "VDIQTDE":
stmt.setDouble(2, Double.parseDouble(elementoNoProduto.getTextContent()));
break;
case "VDIVALOR":
stmt.setDouble(3, Double.parseDouble(elementoNoProduto.getTextContent()));
break;
}
}
}
}
for(int i = 0; i < tamanhoDaLista; i++ ){
Node noDeVenda = listaDeVenda.item(i);
if(noDeVenda.getNodeType() == Node.ELEMENT_NODE){
Element elementoVenda = (Element) noDeVenda;
NodeList listaNosFilhosVenda = elementoVenda.getChildNodes();
int tamanhoListaNosFilhosVenda = listaNosFilhosVenda.getLength();
for(int j = 0; j < tamanhoListaNosFilhosVenda; j++){
Node noFilhosVenda = listaNosFilhosVenda.item(j);
if(noFilhosVenda.getNodeType() == Node.ELEMENT_NODE){
Element elementoNoVenda = (Element) noFilhosVenda;
switch(elementoNoVenda.getTagName()){
case "VEDCLINOME":
stmt.setString(4, elementoNoVenda.getTextContent());
break;
case "VEDID":
stmt.setInt(5, Integer.parseInt(elementoNoVenda.getTextContent()));
break;
case "VEDABERTURA":
try{
String dataSemFormatacao = elementoNoVenda.getTextContent();
Timestamp ts = Timestamp.valueOf(dataSemFormatacao);
stmt.setTimestamp(6, ts);
} catch (Exception e) {
e.printStackTrace();
}
break;
case "CLICPFCGC":
stmt.setString(7, elementoNoVenda.getTextContent());
break;
}
}
}
}
stmt.setInt(8, 123);
stmt.setString(9, "UN");
stmt.setDouble(10, 23.4);
stmt.setDouble(11, 14.3);
stmt.setDouble(12, 14.5);
stmt.setInt(13, 1);
stmt.setInt(14, 1);
stmt.setInt(15, 1);
stmt.execute();
stmt.close();
System.out.println("Importado com sucesso!");
}//FIM DO FOR DE DADOS USUARIO
}//FIM DO FOR DE PRODUTOS
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} catch (ParserConfigurationException e) {
e.printStackTrace();
}
}
}
}
}
public static String getFileExtensionName(File f) {
if (f.getName().indexOf(".") == -1) {
return "";
} else {
return f.getName().substring(f.getName().length() - 3, f.getName().length());
}
}
public void para(){
}
}
答案 0 :(得分:0)
您可以阅读此示例。 https://www.codejava.net/java-se/networking/ftp/java-ftp-file-download-tutorial-and-example
第1步:将文件下载到本地存储。
步骤2:读取文件XML。
祝你好运
答案 1 :(得分:0)
我能够通过将XML文件转换为字符串然后返回为xml来执行代码,希望对您有所帮助。
public class MyFTPClass {
private static FTPFile[] obterArquivosDiretorio(FTPClient ftp, String dirPath) throws IOException {
String cwd = ftp.printWorkingDirectory();
ftp.changeWorkingDirectory(dirPath);
FTPFile[] files = ftp.listFiles();
ftp.changeWorkingDirectory(cwd);
return files;
}
public static void main(String args[]) throws SAXException, ParserConfigurationException {
// Create an instance of FTPClient
FTPClient ftp = new FTPClient();
try {
// Establish a connection with the FTP URL
ftp.connect("caminho_ftp");
// Enter user details : user name and password
boolean isSuccess = ftp.login("usuario", "senha");
if (isSuccess) {
// Fetch the list of names of the files. In case of no files an
// empty array is returned
String path = "ArquivosNotas";
FTPFile[] listedDirectories = obterArquivosDiretorio(ftp, path);
int countXml = 1;
// Iterate on the returned list to obtain name of each file
for (FTPFile file : listedDirectories) {
if (file.getName().toLowerCase().contains("xml")) {
System.out.println();
System.out.println("Lendo " + countXml + " xml");
System.out.println();
InputStream stream = ftp.retrieveFileStream("ArquivosNotas/" + file.getName());
BufferedReader reader = new BufferedReader(new InputStreamReader(stream, "UTF-8"));
// xml vai virar uma string para depois fazer o parse para o document
StringBuilder sb = new StringBuilder();
String inline = "";
while ((inline = reader.readLine()) != null) {
sb.append(inline);
}
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
// convert string do xml para xml em document
Document doc = (Document) builder.parse(new ByteArrayInputStream(sb.toString().getBytes()));
NodeList listaDeVenda = doc.getElementsByTagName("venda");
int tamanhoDaLista = listaDeVenda.getLength();
NodeList listaDeProdutos = doc.getElementsByTagName("item");
int tamanhoDaListaDeProdutos = listaDeProdutos.getLength();
System.out.println();
System.out.println("Qtde itens xml " + tamanhoDaListaDeProdutos);
System.out.println("Finalizado " + countXml + " xml");
System.out.println();
countXml++;
stream.close();
reader.close();
ftp.completePendingCommand();
}
}
}
ftp.logout();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
ftp.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}