web-dev-qa-db-fra.com

Comment lire un fichier en plusieurs parties sous forme de chaîne au printemps?

Je souhaite publier un fichier texte depuis mon bureau à l'aide d'Advanced Rest Client. Voici mon contrôleur:

@RequestMapping(value = "/vsp/debug/compareConfig/{deviceIp:.*}", method = RequestMethod.POST, consumes = { "multipart/form-data" }, produces = { "application/json" })

public ResponseEntity<SuccessResult> compareCLIs(HttpServletRequest request, @RequestParam("file") MultipartFile file, @PathVariable("deviceIp") String device) 
{
log.info(file.getOriginalFilename());
byte[] bytearr = file.getBytes();
log.info("byte length: ", bytearr.length);
log.info("Size : ", file.getSize());

}

Cela ne renvoie aucune valeur pour la longueur d'octet ou la taille du fichier. Je veux lire les valeurs du fichier dans un StringBuffer. Quelqu'un peut-il fournir des conseils à ce sujet? Je ne sais pas si je dois enregistrer ce fichier avant de l'analyser en une chaîne. Si oui, comment enregistrer le fichier dans l'espace de travail?

12
nivedita rahurkar

Si vous souhaitez charger le contenu d'un fichier multipartie dans une chaîne, la solution la plus simple est:

String content = new String(file.getBytes());

Ou, si vous souhaitez spécifier le jeu de caractères:

String content = new String(file.getBytes(), "UTF-8");

Cependant, si votre fichier est volumineux, cette solution n'est peut-être pas la meilleure.

17
OlivierTerrien

Premièrement, cela n'est pas lié à Spring et, deuxièmement, vous n'avez pas besoin d'enregistrer le fichier pour l'analyser.

Pour lire le contenu d'un fichier en plusieurs parties dans une chaîne, vous pouvez utiliser Apache Commons classe IOUtils comme celle-ci

ByteArrayInputStream stream = new   ByteArrayInputStream(file.getBytes());
String myString = IOUtils.toString(stream, "UTF-8");
6