27

私のJavaプロジェクトでは、FileInputStreamを関数に渡しています。変換する必要があります(FileInputStreamを文字列に型キャストします)。

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

6 に答える 6

30

文字列に直接変換することはできません。このようなものを実装する必要がありますこのコードをメソッドに追加します

    //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());

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();
   }
}
于 2013-03-01T15:53:31.750 に答える
24
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();
   }
}
于 2013-03-01T15:49:22.590 に答える
13

ApacheCommonsのIOUtils関数を使用する

import org.apache.commons.io.IOUtils;

InputStream inStream = new FileInputStream("filename.txt");
String body = IOUtils.toString(inStream, StandardCharsets.UTF_8.name()); 
于 2018-02-21T22:02:41.500 に答える
3

エンドライン文字に依存したり、不必要に変換/喪失したりすることを間違えないでください。文字ごとにそれを行います。ストリームを解釈するには、適切な文字エンコードを使用することを忘れないでください。

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();
}

これをもう少し効率的にしたい場合は、代わりに文字の配列を使用できますが、正直なところ、文字のループは非常に高速です。

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();
}
于 2013-03-01T15:54:19.330 に答える
1

私がここで編集した答えから:

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;
}

これにより、すべてのエラーが回避され、正常に機能します。

于 2017-08-29T16:41:42.063 に答える
1

次のコードを使用してください---->

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); 
}
于 2017-11-06T18:39:02.983 に答える