Normalmente, o que significa quando java retorna um “O parâmetro está incorreto”
-
05-07-2019 - |
Pergunta
Estou criando um arquivo como assim
try {
File file = new File(workingDir, obj.getName() + ".xls");
outputStream = new FileOutputStream(file);
} catch (FileNotFoundException ex) {
ex.printStackTrace();
}
E eu estou recebendo
java.io.FileNotFoundException: ..\a\relative\path\obj_name.xls (The parameter is incorrect)
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.<init>(Unknown Source)
at java.io.FileOutputStream.<init>(Unknown Source)
O que "o parâmetro está incorreto" significa? O caminho I validado existe; não deve apenas criar o nome do arquivo? Este é em uma máquina Windows. O código funciona sem este erro em sistemas baseados em UNIX.
Atualizar
Verificado que o arquivo existe que o fluxo de saída é tentar escrever. Também verificou-se que o arquivo é gravável. Depois de muita agitação, tirei o caminho real e acabou de passar no nome do arquivo (não desejado) e que funciona. Assim, a questão tem algo a ver com o caminho. Preciso escapar os caracteres no caminho?
Solução
Isto parece um relatou bug em máquinas Windows.
Em situações normais, algo como um caminho que tem dois pontos (:) em que ela não se refere a uma letra de unidade poderia causar esta mensagem.
Outras dicas
Parece ser um problema com o caminho que você está usando. Tente usar file.getPath () antes de abri-lo para depurar o que está acontecendo com o seu caminho.
File file = new File(workingDir, obj.getName() + ".xls");
System.out.println("Path="+file.getPath());
outputStream = new FileOutputStream(file);
Se o seu "WORKINGDIR" é um caminho relativo, então você tem certeza de que você está no "diretório atual" correto quando você mudou seu aplicativo do UNIX para Windows? Talvez, você deve verificar que o diretório atual do aplicativo em execução é.
Talvez a aplicação não tem o acesso correto de escrever para o arquivo? É somente leitura ou de outra forma protegida?
FileOutputStream.open()
é um método nativo, gostaria de assumir qualquer tipo de mensagem de exceção, tais como "O parâmetro está incorreto" é proveniente do sistema operacional subjacente.
BTW:? o construtor File
não chama FileOutputStream.open()
, por isso é a exceção não é realmente proveniente do código que você postou aqui
Talvez seja por causa das barras invertidas no caminho? Path demasiado longo? O nome do arquivo inválido para este erro (caracters especiais ...)?
eu poderia estar totalmente errado, mas vale a pena tentar uma vez que soa como um erro dependente OS.
Certifique-se de que o usuário que executa o processo JVM tem as permissões adequadas para o acesso desse arquivo.