Normalmente, o que significa quando java retorna um “O parâmetro está incorreto”

StackOverflow https://stackoverflow.com/questions/1208566

  •  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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top