web-dev-qa-db-fra.com

Comment convertir FileInputStream en chaîne en java?

Dans mon projet Java, je passe FileInputStream à une fonction, Je dois convertir (transtypage de fichier FileInputStream en chaîne), Comment procéder.?

public static void checkfor(FileInputStream fis) {
   String a=new String;
   a=fis         //how to do convert fileInputStream into string
   print string here
}
20
bhushan23

Vous ne pouvez pas le convertir directement en chaîne. Vous devriez implémenter quelque chose comme ceci Ajouter ce code à votre méthode

    //Commented this out because this is not the efficient way to achieve that
    //StringBuilder builder = new StringBuilder();
    //int ch;
    //while((ch = fis.read()) != -1){
    //  builder.append((char)ch);
    //}
    //          
    //System.out.println(builder.toString());

Utilisez la solution d'Aubin:

public static String getFileContent(
   FileInputStream fis,
   String          encoding ) throws IOException
 {
   try( BufferedReader br =
           new BufferedReader( new InputStreamReader(fis, encoding )))
   {
      StringBuilder sb = new StringBuilder();
      String line;
      while(( line = br.readLine()) != null ) {
         sb.append( line );
         sb.append( '\n' );
      }
      return sb.toString();
   }
}
24
Arsen Alexanyan
public static String getFileContent(
   FileInputStream fis,
   String          encoding ) throws IOException
 {
   try( BufferedReader br =
           new BufferedReader( new InputStreamReader(fis, encoding )))
   {
      StringBuilder sb = new StringBuilder();
      String line;
      while(( line = br.readLine()) != null ) {
         sb.append( line );
         sb.append( '\n' );
      }
      return sb.toString();
   }
}
17
Aubin

Ne commettez pas l'erreur de compter ou de convertir/perdre inutilement des personnages finaux. Faites-le caractère par caractère. N'oubliez pas d'utiliser le bon codage de caractères pour interpeller le flux.

public String getFileContent( FileInputStream fis ) {
    StringBuilder sb = new StringBuilder();
    Reader r = new InputStreamReader(fis, "UTF-8");  //or whatever encoding
    int ch = r.read();
    while(ch >= 0) {
        sb.append(ch);
        ch = r.read();
    }
    return sb.toString();
}

Si vous voulez rendre cela un peu plus efficace, vous pouvez utiliser des tableaux de caractères, mais pour être honnête, il peut être relativement rapide de passer en boucle sur les caractères.

public String getFileContent( FileInputStream fis ) {
    StringBuilder sb = new StringBuilder();
    Reader r = new InputStreamReader(fis, "UTF-8");  //or whatever encoding
    char[] buf = new char[1024];
    int amt = r.read(buf);
    while(amt > 0) {
        sb.append(buf, 0, amt);
        amt = r.read(buf);
    }
    return sb.toString();
}
4
AgilePro

Utilisation de la fonction IOUtils d’Apache commons

import org.Apache.commons.io.IOUtils;

InputStream inStream = new FileInputStream("filename.txt");
String body = IOUtils.toString(inStream, StandardCharsets.UTF_8.name()); 
3
Andrew TR

Utilisez le code suivant ---->

try {
    FileInputStream fis=new FileInputStream("filename.txt");
    int i=0;    
    while((i = fis.read()) !=-1 ) {  // to reach until the laste bytecode -1
        System.out.print((char)i);   /* For converting each bytecode into character */ 
    }
    fis.close();
} catch(Exception ex) {
    System.out.println(ex); 
}
1

D'une réponse j'ai édité ici :

static String convertStreamToString(Java.io.InputStream is) {
    if (is == null) {
        return "";
    }

    Java.util.Scanner s = new Java.util.Scanner(is);
    s.useDelimiter("\\A");

    String streamString = s.hasNext() ? s.next() : "";

    s.close();

    return streamString;
}

Cela évite toutes les erreurs et fonctionne bien.

0
Andrew