Ola pessoal , estou implementando um Servlet que fará Upload de arquivos estou usando API FileUpload mas estou passando por um problema cômico 
O diretorio que quero abrir é abcd
O interessante que faço uma checagem se o dir existe e se ele não está habilitado para escrita , fiz ate um teste deletei o dir abcd fiz a request para “upar” o arquivo ele criou o dir abcd mas ao tentar abrir o abcd ele lança essa Exception abaixo:
ja mudei os atributos do diretorio para escrita ;;; meu servidor é Windows
Exception:
java.io.FileNotFoundException: C:\xxx\www\wwwroot\abc\abcd (Acesso
negado)
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.<init>(FileOutputStream.java:179)
at java.io.FileOutputStream.<init>(FileOutputStream.java:131)
at applications.rh.ImportStockOptions.doPost(ImportStockOptions.java:95)
Lendo o javadoc me trouxe a seguinte informação na classe FileOutputStram:
Throws:
FileNotFoundException - if the file exists but is
a directory rather than a regular file,
does not exist but cannot be created, or cannot
be opened for any other reason
Não entendi muito bem o que seria se o diretorio rather than a regular file
E no final ele diz que o arquivo não pode ser aberto por algum outro motivo
Alguem ja passou por este problema?
Você pode pegar dados do diretório como por exemplo listar os arquivos que existem dentro dele ex :
File r = new File("/dir/dir/dir");
File a[] = r.listFiles(); // Retorna a lista de arquivos do diretório
Por que você abriria um diretório ?
Posta o código ai 
Eu usei a FileUpload sexta-feira e funcionou normal. Será que cc está usando um diretório onde deve ser um arquivo?
Até mais!
A forma que estou fazendo:
// TODO Auto-generated method stub
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if (isMultipart)
{
// Create a factory for disk-based file items
FileItemFactory factory = new DiskFileItemFactory();
// Set factory constraints
//factory.setSizeThreshold(1000);
// Create Temp Repository
//File fileTemp = new File("c:\\Temp");
//factory.setRepository(fileTemp);
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);
// Set overall request size constraint in bytes
upload.setSizeMax(400000);
// Parse the request
try
{
List /* FileItem */ items = upload.parseRequest(request);
Iterator it = items.iterator();
while (it.hasNext())
{
FileItem item = (FileItem) it.next();
if (!item.isFormField())
{
String cam = this.getServletContext().getRealPath("rh")+"\\stockoptions";
System.out.println("Cam "+cam);
File file = new File(cam);
if (!file.exists())
file.mkdir();
if (file.exists())
{
if (file.isDirectory())
{
if (file.canWrite())
{
item.write(file);
}
else
System.out.println("O arquivo nao pode ser escrito");
}
}
else
System.out.println("O diretorio nao existe");
}
}
Então objeto cam = recebe o diretorio no servidor onde será armazenado o arquivo no momento que chamo item.write(file) ele lança a Exception
Estou usando o Tomcat 3.2 tentei colocar um policy no tomcat.plicy dizendo que nesse diretorio tem a permissao de escrita mas mesmo assim não funcionou …
Ps: Desprezem os dois posts abaixo …
Estou indo para o serviço, as 12:30 eu te mando o meu código e leio o seu com mais calma.
Abraço!
Olha, meu código é quase idêntico ao seu, mas funcionou sem problemas.
Dê uma olhada. Ele no caso obtém todos os outros campos do formulário que não são input file e cria o nome do arquivo e depois pega os dois últimos campos do formulário que são os input files.
[code]
// Cria uma fábrida para items de arquivo baseado em disco
DiskFileItemFactory factory = new DiskFileItemFactory();
// configura as restrições da fábrica
factory.setSizeThreshold( 1 ); // limite para arquivo em memória
factory.setRepository( new File( “C:/www/Intranet/SGP/AvaliacaoInstitucional/temp/” ) ); // seta o repositório temporário do arquivo
// Cria um novo manipulador de envio de arquivo
ServletFileUpload upload = new ServletFileUpload( factory );
// seta a restrição de tamanho do arquivo (20 MB)
upload.setSizeMax( 20971520 );
try {
// analisa o request
List items = upload.parseRequest( request );
StringBuilder nomeDoArquivo = new StringBuilder();
int cont = 0;
for ( int i = 0; i < items.size(); i++ ) {
FileItem item = ( FileItem ) items.get( i );
// se for um campo de formulário
if ( item.isFormField() ) {
nomeDoArquivo.append( item.getString() + "_" );
// é o arquivo em sí
} else {
File uploadedFile = null;
if ( cont == 0 )
uploadedFile = new File( "C:/www/Intranet/SGP/AvaliacaoInstitucional/" +
nomeDoArquivo + "Relatorio.pdf" );
else
uploadedFile = new File( "C:/www/Intranet/SGP/AvaliacaoInstitucional/" +
nomeDoArquivo + "Grafico.pdf" );
cont++;
try {
item.write( uploadedFile );
} catch ( Exception exc ) {
exc.printStackTrace();
}
}
}
} catch ( FileUploadException exc ) {
exc.printStackTrace();
}[/code]
Até mais!
Ola David qual versao tomcat que vc esta utilizando?
Meu codigo nao tem nada de diferente do seu …
Realmente, como falei o código não tem diferença… Uso o tomcat 5.5
Até mais!
Cara resolvi meu problema acho que no momento que executava o item.write(repositorio) ele confundia que o repositorio era uma arquivo por isso negava o acesso;
A solução
if (file.canRead())
{
String fileName = item.getName();
if (fileName != null)
{
fileName = FilenameUtils.getName(fileName);
item.write(new File(cam+"\\"+fileName));
}
Obrigado pela ajuda