Estou desenvolvendo um sistema de caderneta escolar, onde, ao salvar, o usuário digitará o nome do arquivo a ser salvo. Gostaria de, impedir o usuário de digitar um dos caracteres inválidos em nomes de arquivos:
\ / ? : * " > < |
ou até mesmo outros, se houver (não sei, conheço somente estes)…
Já pesquisei no Google e em vários fóruns possibilidades como: JFormattedTextField, PlainDocument, DocumentFilter, KeyListener (o que eu logo descartei, pois é possível copiar e colar), mas a grande maioria, senão 100% dos casos o pessoal pede filtros a-z ou 0-9, o que não me ajuda.
O mais próximo que eu cheguei foi aqui:
[code]public class Filtro extends DocumentFilter{
@Override
public void insertString(FilterBypass fb, int offset, String text, AttributeSet attr)
throws BadLocationException {
fb.insertString(offset, text.replaceAll("[\W]", “”), attr);
}
@Override
public void replace(FilterBypass fb, int offset, int length, String text, AttributeSet attrs)
throws BadLocationException {
fb.replace(offset, length, text.replaceAll("[\\W]", ""), attrs);
}
}[/code]
Onde o \W permite apenas letras, dígitos e underline. Já é alguma coisa, mas aí impede outros caracteres interessantes pra nomes de arquivos, como traço, ponto e Ç, além do espaço em branco.
Tentei colocar a expressão no lugar do \W assim:
fb.replace(offset, length, text.replaceAll("[\\/?:*\"><|]", ""), attrs);
mas não funcionou… ainda continua possível digitar esses caracteres.
Li também sobre expressões regulares, onde o ? e * são operadores… tentei reajustá-los dentro dos colchetes, mas sem sucesso…
Alguém teria alguma ideia interessante?