如题
要求:
1、不能用readLine()方法
2、不知道文件的大小

解决方案 »

  1.   

    只要知道文件的编码就可以了。
    1、创建足够大小的 byte[]
    2、用 read 方法将文件读入(如果文件实在太大,可以考虑存为文件)
    3、用编码转换成 String
    4、取得 String 当中的 char。
      

  2.   

    import java.io.*;
    import java.nio.*;
    import java.nio.channels.FileChannel;
    public class ReadAString { /**
     * @param args
     */
      public static void main(String[] args) {
        File inFile = new File("D:/jdk/src/java/write.txt");
        FileInputStream inStream = null;   
        try {
          inStream = new FileInputStream(inFile); 
        } catch(FileNotFoundException e) {
          e.printStackTrace(System.err);
        }
    FileChannel inChannel = inStream.getChannel();
    ByteBuffer buffer=null;
    char[] cArray=null;
    try{
    buffer = ByteBuffer.allocate((int)inChannel.size());
    cArray=new char[(int) (inChannel.size()/2)];
    }catch(IOException e){
    e.printStackTrace(System.err);
    }
        try {
            while(inChannel.read(buffer) != -1) {
           buffer.flip();
          CharBuffer cbuffer=buffer.asCharBuffer();
               cbuffer.get(cArray);         
               for(char c:cArray){
                System.out.printf("%s",c);
               }
         buffer.clear();
          }
          System.out.println();
          System.out.println("OK,SUCCESS!");
          inStream.close();                    
        } catch(IOException e) {
          e.printStackTrace(System.err);
        }
      }
    }搞定.
      

  3.   

    其实我碰到的问题是这样的:try {
    HttpURLConnection con = (HttpURLConnection)url.openConnection();
    con.connect();
    int length = in.available();
    char[] buffer = new char[length];
    BufferedReader reader = new BufferedReader(new InputStreamReader(con.getInputStream()));
    reader.read(buffer);         
    reader.close();
    con = null;
    } catch(IOException e) {
    System.out.println("error: can't connect to " + url);
    }
    但是这样只能读网页的一部分,in.available()返回的并不是整个网页的长度,而是当前收到的几个HTTP包的长度,这怎么解决阿???(不能用reader.readLine())
      

  4.   

    StringBuffer strobject = new StringBuffer( );
          for (int c = in.read(); c != -1; c = in.read( )) {
            strobject.append((char) c);
          }
      strobject.toString(); // 转换成string 类型.晕,是读网络.
    换成上面的看行不行.
    用in.available();这个一次返回的值,正常情况下肯定不完整,
    所以读网络不要用avai...来算大小.
      

  5.   

    楼上:
    开始我也是用的和你类似的方法,但是这样效率很低:1、c被反复修改,很浪费资源;2、一次读一个字符效率太低
    而如果用下面的办法:
    String line;
    StringBuffer pageBuffer = new StringBuffer();
    while ((line = reader.readLine()) != null) {
        pageBuffer.append(line + "\n");
    }
    line被反复创建,产生n多垃圾有没有好一点的办法呢????