工厂模式设计实现读取文本文件和图像的三基色信息

原创 2016年06月01日 15:35:58

要求:

编写读文件功能,具体为读取文本文件(包括GBK,UTF8,UNICODE 编码下的文本文件,要求获得全文内容);读取图像文件(BMO,GIF,JPG ),要求获得图像的宽度、长度、每一点的RGB三基色信息。

请使用观察者模式设计该系统。

代码:

import java.awt.image.BufferedImage;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;

interface Type{
	public void read();

	public void read(String filePath);
}
class TextType implements Type{
	public void read(String filePath){
		
		try{
			String encoding="GBK";
		File file = new File(filePath);
		if(file.isFile()&&file.exists()){
			InputStreamReader du = new InputStreamReader(new FileInputStream(file),encoding);
			BufferedReader bufferedReader = new BufferedReader(du);
			String lineTxt = null;
			while((lineTxt = bufferedReader.readLine())!=null){
				System.out.println(lineTxt);
			}
			du.close();
		}else{
			System.out.println("找不到指定文件!");
		}
		}catch(Exception e){
			System.out.println("读取文件内容出错!");
			e.printStackTrace();
		}
	}

	@Override
	public void read() {
		// TODO Auto-generated method stub
		
	}
}
class ImageType implements Type{
	public void read(){
		
	}

	@Override
	public void read(String filePath) {
		   ImageIcon image=new ImageIcon(filePath);
		   InputStream in;
		   BufferedImage img = null;
		try {
			in = new FileInputStream(filePath);
			img=ImageIO.read(in);
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}catch(IOException e){
			e.printStackTrace();
		}
		
		   int wid=img.getWidth();
		   int hid=img.getHeight();
		   int rgb[][]=new int[wid][hid];
	          for(int i=0;i<wid;i++){
	               for(int j=0;j<hid;j++){
	                    rgb[i][j]=img.getRGB(i, j) & 0xFFFFFF;
	                    System.out.print(rgb[i][j]+" ");
	               }
	               System.out.println();
	          }
		    //System.out.println(wid+" "+hid);
		   }
			 }
	
class TypeFactory{
	public Type getType(String type){

		if(type==null){
			return null;
		}
		if(type.equals("TextType")){
			return new TextType();
		}else if(type.equals("ImageType")){
			return new ImageType();
		}
		return null;

	}
}
public class FactoryDemo {
	public static void main(String []args){
		
		TypeFactory typefactory = new TypeFactory();
		
		Type type1 = typefactory.getType("TextType");
		String filePath1 ="C:\\Users\\ZZT\\Desktop\\1.txt";
		type1.read(filePath1);
		System.out.println();
		Type type2 = typefactory.getType("ImageType");
		String filePath2 ="C:\\Users\\ZZT\\Desktop\\2.jpg";
		type2.read(filePath2);
	}
}



版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

实现设计模式:工厂模式

工厂模式将创建对象的代码从客户代码中分离,提供了一种在大系统中管理创建众多对象的有效方法。当从配置文件或流中创建对象时,经常采用这种模式。 这里提供一种通用实现,可以作为参考。 #include #...
  • glyc
  • glyc
  • 2013-08-12 16:38
  • 555

Windows读取文件的版本信息

ValueName:需要取得信息类型 szModuleName:文件名 RetStr:得到的字符串,失败时为空。bool QueryValue(const std::string& ValueNa...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

设计模式——三工厂

设计模式中的三工厂指简单工厂模式、工厂方法模式、抽象工厂模式。             我们来逐步比较这三个模式的区别:     简单工厂模式核心代码: //简单运算工厂...

基本设计模式:单例模式和工厂模式代码实现

单例模式       单例模式保证一个类仅有一个实例,并提供一个访问它的全局访问点。通常我们可以让一个全局变量使得一个对象被访问,但它不能阻止你实例化多个对象。一个最好的办法是,让类自身负责保存...

Java 获取文件的基本信息

package testfile;import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream;...
  • zzldm
  • zzldm
  • 2017-01-11 20:46
  • 371

C#读取文件信息

很多时候我们都需要读取文件的信息,C#给我们提供了非常强大的类库,里面封装了几乎所有我们可以想到的和我们没有想到的类,流是读取文件的一般手段,使用流读取,这也是我们常用的方法。通常我们使用C#读取文件...

C# 获取选择文件信息

private bool GetDocuContent(out byte[] Content, out string FileName, out string ExtensionName) ...

设计模式之三:工厂方法模式—多态工厂的实现

简单工厂的严重问题: 当系统中需要引进新产品时,静态工厂方法通过所传入参数的不同来创建不同的产品,这必定要修改工厂类的源代码,违背了开闭原则 引入工厂方法模式: 针对不同的产品提供不...

读取设备信息到文件

由于没有设备所以在设备一栏空白,若有设备点击刷新设备就可以选择设备。 目的是从设备的nor flash地址为0000 0000 开始读取0080 0000 即8M的数据到hello.bin文件中。 ...

文件基本操作之获取文件基本信息

学习关于文件的: 1.获取文件的打开路径。 2.获取文件扩展名 3.获取文件的创建时间 4.获取最后修改文件的时间 5.向RichTextBox添加文本 先看下大概界面功能: ...
  • Nliki
  • Nliki
  • 2016-07-20 16:58
  • 199
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)