如何将网络文件读入char[]??? 如题要求:1、不能用readLine()方法2、不知道文件的大小 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 只要知道文件的编码就可以了。1、创建足够大小的 byte[]2、用 read 方法将文件读入(如果文件实在太大,可以考虑存为文件)3、用编码转换成 String4、取得 String 当中的 char。 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); } }}搞定. 其实我碰到的问题是这样的: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()) StringBuffer strobject = new StringBuffer( ); for (int c = in.read(); c != -1; c = in.read( )) { strobject.append((char) c); } strobject.toString(); // 转换成string 类型.晕,是读网络.换成上面的看行不行.用in.available();这个一次返回的值,正常情况下肯定不完整,所以读网络不要用avai...来算大小. 楼上:开始我也是用的和你类似的方法,但是这样效率很低:1、c被反复修改,很浪费资源;2、一次读一个字符效率太低而如果用下面的办法:String line;StringBuffer pageBuffer = new StringBuffer();while ((line = reader.readLine()) != null) { pageBuffer.append(line + "\n");}line被反复创建,产生n多垃圾有没有好一点的办法呢???? 探讨java中获取局域网中的上线IP的思路..... JAVA类库中的类可以看到原码么? Myeclipse6.0.1 swing插件下载 JMF做RTP,能在ADSL上做组播吗? 关于java多线程锁的问题 如何增加变量更新锁 邮件发送问题! java创建进程问题 在QQ群上讨论Java 为何applet在jbuilder7下的appletviewer能看,在网页中却出err java的怪问题?在线等待。。。。。。 JTable如何修改列表体的颜色? 关于eclipse与jdk版本的问题 麻烦高手来瞄瞄
1、创建足够大小的 byte[]
2、用 read 方法将文件读入(如果文件实在太大,可以考虑存为文件)
3、用编码转换成 String
4、取得 String 当中的 char。
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);
}
}
}搞定.
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())
for (int c = in.read(); c != -1; c = in.read( )) {
strobject.append((char) c);
}
strobject.toString(); // 转换成string 类型.晕,是读网络.
换成上面的看行不行.
用in.available();这个一次返回的值,正常情况下肯定不完整,
所以读网络不要用avai...来算大小.
开始我也是用的和你类似的方法,但是这样效率很低:1、c被反复修改,很浪费资源;2、一次读一个字符效率太低
而如果用下面的办法:
String line;
StringBuffer pageBuffer = new StringBuffer();
while ((line = reader.readLine()) != null) {
pageBuffer.append(line + "\n");
}
line被反复创建,产生n多垃圾有没有好一点的办法呢????