黑马程序员技术交流社区
标题:
图片切割问题,愁死了
[打印本页]
作者:
王月
时间:
2012-6-12 21:58
标题:
图片切割问题,愁死了
本帖最后由 王月 于 2012-6-12 22:03 编辑
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class Temp {
public static void main(String[] args) throws IOException {
/*
* 需求:切割图片
*/
// 1,创建流对象的引用。
FileInputStream fr = new FileInputStream("hh.jpg");
FileOutputStream fw1 = new FileOutputStream("hh1.jpg");
FileOutputStream fw2 = new FileOutputStream("hh2.jpg");
FileOutputStream fw3 = new FileOutputStream("hh3.jpg");
// 创建一个字符数组作为缓冲区。
byte[] buf = new byte[50000];
// 进行读写操作。
int count =0;
int ch= 0;
while ((ch = fr.read(buf)) != -1) {
if(count==0)
{
fw1.write(buf);
count++;
fw1.flush();
}
if((count==1)&&(ch = fr.read(buf)) != -1){
fw2.write(buf);
count++;
fw2.flush();
}
if((count==2)&&(ch = fr.read(buf)) != -1)
{
fw3.write(buf);
fw3.flush();
break;//因为我那张图片只有100kb左右,所以想把它只切成三份。
}
}
fw1.close();
fw2.close();
fw3.close();
}
}
我也看了毕老师的视频,可我感觉这样也可以呀,只是我自己将切割的图片分别写入了三个图片文件中。可为什么不行呢。
请教各位高手了
作者:
张頔
时间:
2012-6-12 22:38
首先 你的 if((count==1)&&(ch = fr.read(buf)) != -1) 这地方 你的(这时英语的)写成了(这是中文的)
还有你的
temp.java:39:
break;//这地方 你也写成中文的了
仔细一点{:soso_e112:}
作者:
田林
时间:
2012-6-12 23:07
1.你判断if语句中count值得语句使用了中文括号,应改为英文的。
2.break后面的分号也应该是英文形式的。
3. 输出语句应该输出的内容时读入到数组中的有效内容,例如:fw1.write(buf); ---------------->fw1.write(buf,0,ch);
作者:
黄昆
时间:
2012-6-12 23:25
注意你的中英文,我帮你改过了 正确的可执行代码如下。
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class Temp {
public static void main(String[] args) throws IOException {
/*
* 需求:切割图片
*/
// 1,创建流对象的引用。
FileInputStream fr = new FileInputStream("C:\\1.1.jpg");
FileOutputStream fw1 = new FileOutputStream("d:\\hh1.jpg");
FileOutputStream fw2 = new FileOutputStream("d:\\hh2.jpg");
FileOutputStream fw3 = new FileOutputStream("d:\\hh3.jpg");
// 创建一个字符数组作为缓冲区。
byte[] buf = new byte[50000];
// 进行读写操作。
int count =0;
int ch= 0;
while ((ch = fr.read(buf)) != -1) {
if(count==0)
{
fw1.write(buf);
count++;
fw1.flush();
}
if((count==1)&&(ch = fr.read(buf)) != -1){
fw2.write(buf);
count++;
fw2.flush();
}
if((count==2)&&(ch = fr.read(buf)) != -1)
{
fw3.write(buf);
fw3.flush();
break;//因为我那张图片只有100kb左右,所以想把它只切成三份。
}
}
fw1.close();
fw2.close();
fw3.close();
}
}
复制代码
作者:
草上飞
时间:
2012-11-4 20:04
用这个把,肯定行,
import java.io.*;
import java.util.*;
class Spiltfiledemo
{
public static void main(String[] args) throws IOException
{
//spiltfile();
merge();
}
//用合并流合并数据
public static void merge() throws IOException
{
ArrayList<FileInputStream> al=new ArrayList<FileInputStream>();
for (int x=1;x<=3 ;x++ )
{
al.add(new FileInputStream("d:\\spilt\\"+x+".part"));//将所有切割的碎片添加到数组中
}
final Iterator<FileInputStream> it=al.iterator();
Enumeration<FileInputStream> en=new Enumeration<FileInputStream>()
{
public boolean hasMoreElements()
{
return it.hasNext();//判断是否还有下一个元素
}
public FileInputStream nextElement()
{
return it.next();//如歌还有这放回下一个元素
}
};
SequenceInputStream sis=new SequenceInputStream(en);//读取所有集合中的文件,
FileOutputStream fos=new FileOutputStream("d:\\spilt\\1.bmp");//目的文件
byte[] b=new byte[1024*10];
int len=0;
while ((len=sis.read(b))!=-1)
{
fos.write(b,0,len);
}
fos.close();
sis.close();
}
public static void spiltfile()throws IOException
{
FileInputStream fis=new FileInputStream("d:\\2.jpg");
FileOutputStream fos=null;
byte[] b=new byte[1024*300];//第一个字节缓冲区
int len=0;
int count=1;
while ((len=fis.read(b))!=-1)//将数据读取到byte中
{
fos=new FileOutputStream("d:\\spilt\\"+(count++)+".part");//将切割的碎片出入到spilt文件中
fos.write(b,0,len);
fos.close();
}
fis.close();
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2