import java.io.FileWriter;
import java.io.IOException;public class TestFile { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub try {
FileWriter file = new FileWriter("1.txt");
char chRecvBuf[] = new char[4096];
int offset = 0;
for (int i = 0; i < 2; i++) {
file.write(chRecvBuf, offset, 4096);
offset += 4096;
}
file.close();
System.out.println("Ok");
} catch (IOException e) {
System.out.println(e.toString());
}
}}这段代码 for循环部分循环次数超过2就会出错, 难道FileWriter只能写小于4096的文件么?
import java.io.IOException;public class TestFile { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub try {
FileWriter file = new FileWriter("1.txt");
char chRecvBuf[] = new char[4096];
int offset = 0;
for (int i = 0; i < 2; i++) {
file.write(chRecvBuf, offset, 4096);
offset += 4096;
}
file.close();
System.out.println("Ok");
} catch (IOException e) {
System.out.println(e.toString());
}
}}这段代码 for循环部分循环次数超过2就会出错, 难道FileWriter只能写小于4096的文件么?
解决方案 »
- 调了一天没有搞定,JDBC连接时出现“加载驱动器类时出现异常”
- 100分 求输入1个数N 打印前N个素数的代码
- 新手上路,关于Short的问题。
- 生成java包时出现的问题!帮忙解决
- 新手求教
- SWT问题,谢谢各位!!在线等答案
- 請教 OpenPDF 轉換為.NET 使用的DLL後,關于CMap文件夾裏面的字體信息的路徑問題 謝謝!
- 请问那里有HTTPUNIT下载,高分重谢!!!请帮忙UP!急用!
- JBuilder5中运行Applet问题???????????
- PreparedStatement插入数据时异常: 插入的值对于列过大
- 使用socket传送pdf文件的问题
- 聊天室有关问题()急!!
后面加上
file.flush();
这么一句
循环体内的 file.write(chRecvBuf, offset, 4096); 第二次被调用时,实际上是
file.write(chRecvBuf, 4096, 4096);
可是你的 chRecvBuf 的下标最多只能是 4095 啊!
m_sockOut.write(m_strCmd);
m_sockOut.flush();
FileWriter file = new FileWriter(m_strCmd.substring(4, m_strCmd.length()));
char chRecvBuf[] = new char[4096];
int nSize, offset = 0;
while(true)
{
nSize = m_sockIn.read(chRecvBuf);
if(nSize <= 0)
break;
file.write(chRecvBuf, offset, nSize);
offset += nSize;
}
file.close();
StopSocket();
offset:是由源中,即chRecvBuf中何处开始取字节值;----我想你理解为由文件的何处开始写。
length:是由chRecvBuf中取多少字串写到文件中. 也就是说,它代表的意思是:将chREcvBuf中由offset开始先后length个字节写入到文件中。我想,你的理解是:从文件offset开始,将chrecvbuf中长度为lenght的字串写到文件中。
char chRecvBuf[] = new char[4096];
int nSize;
while(true)
{
nSize = m_sockIn.read(chRecvBuf);
if(nSize <= 0)
break;
file.write(chRecvBuf, 0, nSize);
}
file.close();多谢楼上, 我改成这样就不出异常了. 不过用这断代码保存MP3不能播放...
是不是文件指针不动, 一直在写一个文件啊
File file = new File("f:/download/fsx.wmv");
FileInputStream fileIn = new FileInputStream(file); File out = new File("f:/download/aaa.wmv");
if (out.exists())
{
out.delete();
}
out.createNewFile(); FileOutputStream fileOut = new FileOutputStream(out); final int MAX_BYTE = 60000000;
long streamTotal = 0;
int streamNum = 0;
int leave = 0;
byte[] b = null;
int i = 0; streamTotal = fileIn.available();
streamNum = (int) Math.floor(streamTotal / MAX_BYTE);
leave = (int) streamTotal % MAX_BYTE;
b = new byte[(int) streamTotal];
while ((i = fileIn.read(b)) != -1)
{ fileOut.write(b, 0, b.length);
} //如果mp3大于60m,那就得拆分来写了,因为byte数组只支持60m
// if(streamNum > 0)
// {
// for (int j = 0; j < streamNum; j++)
// {
// b = new byte[MAX_BYTE];
// fileIn.read(b, 0, MAX_BYTE);
// fileOut.write(b);
// fileOut.flush();
// }
// }
//
// b = new byte[leave];
// fileIn.read(b, 0, leave);
// fileOut.write(b);
// fileOut.flush(); fileIn.close();
fileOut.close();
{
nSize = m_sockIn.read(chRecvBuf); 每次循环都会从socket中读取新的数据
if(nSize <= 0)
break;
file.write(chRecvBuf, 0, nSize); 这个偏移量(offset)是缓冲区的偏移为什么不是物理文件的偏移啊? write之后再次被调用时是否还是从文件头开始写啊?
offset += nSize;
}
seek()已经存在的字节
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.RandomAccessFile;
import java.net.InetSocketAddress;
import java.net.Socket;public class Console {
Socket m_sock;
InetSocketAddress m_IpAddress;
PrintWriter m_sockOut;
BufferedReader m_sockIn;
BufferedReader m_cmdIn;
String m_strCmd, m_strIp;
int m_nPort;
void Initial(String strIp, int nProt)
{
m_cmdIn = new BufferedReader(new InputStreamReader(System.in));
m_strIp = strIp;
m_nPort = nProt;
System.out.println("-------------- 终端维护系统 --------------");
}
void StartSocket()
{
m_IpAddress = new InetSocketAddress(m_strIp, m_nPort);
m_sock = new Socket();
try
{
m_sock.connect(m_IpAddress, 100);
m_sock.setSoTimeout(3000);
m_sockIn = new BufferedReader(new InputStreamReader(m_sock.getInputStream()));
m_sockOut = new PrintWriter(m_sock.getOutputStream(), true);
}
catch(IOException e)
{
System.out.println(e.toString());
}
}
void StopSocket()
{
try
{
if(m_sockIn != null)
m_sockIn.close();
if(m_sockOut != null)
m_sockOut.close();
if(m_sock != null)
m_sock.close();
}
catch(IOException e)
{
System.out.println(e.toString());
}
}
boolean ReceiveCmd()
{
try
{
m_strCmd = m_cmdIn.readLine();
if(m_strCmd.equals("exit"))
return false;
}
catch(IOException e)
{
System.out.println(e.toString());
}
return true;
}
void ProcessCmd()
{
if(m_strCmd.equals("ls"))
{
try
{
StartSocket();
m_sockOut.write(m_strCmd);
m_sockOut.flush();
while(true)
{
String strReadSocket = m_sockIn.readLine();
if(strReadSocket == null)
break;
System.out.println(strReadSocket);
}
StopSocket();
}
catch(IOException e)
{
System.out.println(e.toString());
}
}
if(m_strCmd.startsWith("cd"))
{
StartSocket(); m_sockOut.write(m_strCmd);
m_sockOut.flush(); StopSocket();
}
if(m_strCmd.equals("pwd"))
{
try
{
StartSocket();
m_sockOut.write(m_strCmd);
m_sockOut.flush();
String strReadSocket = m_sockIn.readLine();
System.out.println(strReadSocket);
StopSocket();
}
catch(IOException e)
{
System.out.println(e.toString());
}
}
if(m_strCmd.startsWith("get"))
{
InputStream sockIn;
try
{
m_IpAddress = new InetSocketAddress(m_strIp, m_nPort);
m_sock = new Socket();
m_sock.connect(m_IpAddress, 100);
m_sock.setSoTimeout(3000);
sockIn = m_sock.getInputStream();
m_sockOut = new PrintWriter(m_sock.getOutputStream(), true);
m_sockOut.write(m_strCmd);
m_sockOut.flush();
RandomAccessFile file = new RandomAccessFile(m_strCmd.substring(4, m_strCmd.length()), "rw");
byte byWriteBuf[] = new byte[4096];
long nSize, offset = 0;
while(true)
{
nSize = sockIn.read(byWriteBuf);
if(nSize <= 0)
break;
file.seek(offset);
file.write(byWriteBuf);
offset += nSize;
}
file.close();
sockIn.close();
StopSocket();
}
catch(IOException e)
{
System.out.println(e.toString());
}
System.out.println("文件传输完成.");
}
if(m_strCmd.startsWith("run"))
{
try
{
StartSocket();
m_sockOut.write(m_strCmd);
m_sockOut.flush();
System.out.println(m_sockIn.readLine());
StopSocket();
}
catch(IOException e)
{
System.out.println(e.toString());
}
}
}
}