Comme le suggère d'ailleurs, ce n'est généralement pas ce que vous voulez faire. Il est généralement préférable de créer un fichier temporaire à l'aide d'une méthode sécurisée de Fichiers.createTempFile().
Vous ne devriez pas le faire avec une liste blanche et de ne garder que les "bonnes" des personnages. Si le fichier ne contient que des caractères Chinois, alors vous dépouiller de tout, hors de lui. Nous ne pouvons pas utiliser une liste blanche pour cette raison, nous devons utiliser une liste noire.
Linux assez bien permet de tout ce qui peut être une vraie douleur. Je voudrais juste limite Linux à la même liste que vous limiter à Windows de sorte que vous enregistrez vous-même des maux de tête à l'avenir.
L'utilisation de ce C# extrait sur Windows, j'ai produit une liste de caractères qui ne sont pas valides sur Windows. Il ya tout à fait quelques personnages de plus dans cette liste que vous pouvez penser (41), de sorte que je ne recommande pas d'essayer de créer votre propre liste.
foreach (char c in new string(Path.GetInvalidFileNameChars()))
{
Console.Write((int)c);
Console.Write(",");
}
Ici est une simple classe Java qui "nettoie" un nom de fichier.
public class FileNameCleaner {
final static int[] illegalChars = {34, 60, 62, 124, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 58, 42, 63, 92, 47};
static {
Arrays.sort(illegalChars);
}
public static String cleanFileName(String badFileName) {
StringBuilder cleanName = new StringBuilder();
for (int i = 0; i < badFileName.length(); i++) {
int c = (int)badFileName.charAt(i);
if (Arrays.binarySearch(illegalChars, c) < 0) {
cleanName.append((char)c);
}
}
return cleanName.toString();
}
}
EDIT:
Comme Stephen suggéré probablement vous devriez également vérifier que ces fichiers ne peut accéder qu'à se produire au sein de l'annuaire vous permettent.
La réponse suivante est un exemple de code pour la création d'un custom contexte de sécurité en Java et donc l'exécution de code dans 'bac à sable'.
Comment voulez-vous créer une sécurité JEXL (script) sandbox?