【java养成】:案例(批量操作文件功能、商城进货交易记录程序设计)

 

学习内容:批量操作文件功能

(1)用户输入指令1,代表“指定关键字检索文件”,此时需要用户输入检索的目录和关键字,系统在用户指定的目录下检索出文件名中包含关键字的文件,并将其绝对路径展示出来。

(2)用户输入指令2,代表“指定后缀名检索文件”,此时需要用户输入检索的目录和后缀名(多个后缀名用逗号分隔),系统在用户指定的目录下检索出指定后缀名的文件,并将其绝对路径展示出来。

(3)用户输入指令3,代表“复制文件/目录”,此时需要用户输入源目录和目标目录,程序执行后会将源目录下的内容复制到目标目录下。

(4)用户输入指令4,代表“删除文件/目录”,此时需要用户输入需要删除掉的文件目录,程序执行后会将目录以及目录下的内容全部删除。

(5)用户输入指令5,代表“退出”,即退出该系统。

实验代码:

DocumentManager

/**
 * @author  批量操作文件功能
 *
 */
package LHB.pack;

import java.io.File;
import java.util.ArrayList;
import java.util.Scanner;

public class DocumentManager {
	public static void main(String args[]) throws Exception {
		Scanner sc = new Scanner(System.in);
		System.out.println("--1:指定关键字检索文件  2:指定后缀名检索文件" + "3:复制文件/目录  4:删除文件/目录   5:退出--");
		while (true) {
			System.out.print("请输入指令:");
			int command = sc.nextInt();
			switch (command) {
			case 1:
				searchByKeyWorld();
				break;
			case 2:
				searchBySuffix();
				break;
			case 3:
				copyDirectory();
				break;
			case 4:
				deleteDir();
				break;
			case 5:
				exit();// 退出
				break;
			default:
				System.out.println("输入的指令错误!");
				break;
			}

		}
	}

	// 1:指定关键字检索文件
	private static void searchByKeyWorld() {
		Scanner sc = new Scanner(System.in);
		System.out.print("请输入要检索的目录位置:");
		String path = sc.next();
		File file = new File(path);
		if (!file.exists() || !file.isDirectory()) {
			System.out.println(path + "(不是有效目录)");
			return;
		}
		System.out.println("请输入搜索关键字:");
		String key = sc.next();
		ArrayList<String> list = FileUtile.listFiles(file, key);
		for (Object obj : list) {
			System.out.println(obj);
		}
	}

	// 2:指定后缀名检索文件
	private static void searchBySuffix() {
		Scanner sc = new Scanner(System.in);
		System.out.print("请输入要检索的目录位置:");
		String path = sc.next();
		File file = new File(path);
		if (!file.exists() || !file.isDirectory()) {
			System.out.println(path + "(不是有效目录)");
			return;
		}
		System.out.println("请输入搜索后缀:");
		String suffix = sc.next();
		String[] suffixArray = suffix.split(",");
		ArrayList<String> list = FileUtile.listFiles(file, suffixArray);
		for (Object obj : list) {
			System.out.println(obj);
		}
	}

	// 3:复制文件/目录
	private static void copyDirectory() throws Exception {
		Scanner sc = new Scanner(System.in);
		System.out.print("请输入源目录:");
		String srcDirectory = sc.next();
		File srcFile = new File(srcDirectory);
		if (!srcFile.exists() || !srcFile.isDirectory()) {
			System.out.println("无效目录!");
			return;
		}
		System.out.print("请输入目标位置:");
		String destDirectory = sc.next();
		File destFile = new File(destDirectory);
		if (!destFile.exists() || !destFile.isDirectory()) {
			System.out.println("无效位置!");
			return;
		}
		FileUtile.copySrcPathToDestPath(srcFile, destFile);
	}

	// 4:删除文件/目录
	public static void deleteDir() {
		Scanner sc = new Scanner(System.in);
		System.out.print("请输入需要删除的源目录:");
		String delpath = sc.next();
		File dir = new File(delpath);
		if (dir.exists()) {
			File[] files = dir.listFiles();
			for (File file : files) {
				if (file.isDirectory()) {
					deleteDir();
				} else {
					file.delete();
				}
			}
			dir.delete();
		}
	}

	private static void exit() {
		System.out.println("已退出系统,谢谢使用!");
		System.exit(0);
	}
}

FileUtile类:

package LHB.pack;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FilenameFilter;
import java.util.ArrayList;

public class FileUtile {
	public static ArrayList<String> listFiles(File file, final String key) {
		FilenameFilter filter = new FilenameFilter() {
			public boolean accept(File dir, String name) {
				// TODO Auto-generated method stub
				File currFile = new File(dir, name);
				if (currFile.isFile() && name.contains(key)) {
					return true;
				}
				return false;
			}
		};
		ArrayList<String> arraylist = fileDir(file, filter);
		return arraylist;
	}

	public static ArrayList<String> listFiles(File file, final String[] suffixArray) {
		FilenameFilter filter = new FilenameFilter() {
			public boolean accept(File dir, String name) {
				// TODO Auto-generated method stub
				File currFile = new File(dir, name);
				if (currFile.isFile()) {
					for (String suffix : suffixArray) {
						if (name.endsWith("." + suffix)) {
							return true;
						}
					}
				}
				return false;
			}
		};
		ArrayList<String> arraylist = fileDir(file, filter);
		return arraylist;
	}

	private static ArrayList<String> fileDir(File dir, FilenameFilter filter) {
		// TODO Auto-generated method stub
		ArrayList<String> arrayList = new ArrayList<String>();
		File[] lists = dir.listFiles(filter);
		for (File list : lists) {
			arrayList.add(list.getAbsolutePath());
		}
		File[] files = dir.listFiles();
		for (File file : files) {
			if (file.isDirectory()) {
				ArrayList<String> every = fileDir(file, filter);
				arrayList.addAll(every);
			}
		}
		return arrayList;
	}

	public static void copySrcPathToDestPath(File srcDir, File destDir) throws Exception {
		File[] files = srcDir.listFiles();
		for (int i = 0; i < files.length; i++) {
			File copiedFile = new File(destDir, files[i].getName());
			if (files[i].isDirectory()) {
				if (!copiedFile.mkdirs()) {
					System.out.println("无法创建" + copiedFile);
					return;
				}
				copySrcPathToDestPath(files[i], copiedFile);
			} else {
				FileInputStream input = new FileInputStream(files[i]);
				FileOutputStream output = new FileOutputStream(copiedFile);
				byte[] buffer = new byte[1024];
				int n = 0;
				while ((n = input.read(buffer)) != -1) {
					output.write(buffer, 0, n);
				}
				input.close();
				output.close();
			}
		}
	}
}

学习内容:商城进货交易记录程序设计

(1)为了方便保存商品的相关信息,可以将图书信息封装为一个实体类。

(2) 创建一个集合用于模拟超市仓库,然后向集合中添加有具体信息的商品

(3)管理员进货是通过在控制台键盘输入商品编号和购买数量的方式进行的,如果商品编号正确,且购买数量也正常,则商品进货成功,并将此商品的进货信息保存到csv文件中,同时要将库存数量增加。

(4)查询商品信息时,可以通过Scanner类的nextInt()方法从控制台获取商品编号,之后根据这个编号到库存中查询此商品的信息,如果查到了商品的信息,从控制台获取进货的数量之后,将此商品的所有信息进行封装。

(5)将商品的销售信息写入到csv文件之前,需先拼凑好csv文件名,再判断本地是否已存在此文件,这里可通过输入流尝试获取此文件的字节流,如果获取成功,则证明这个文件已存在,那么就通过输出流向文件末尾追加销售信息,如果获取失败,即异常,说明之前并没有生成当日的销售信息,则需要新建此文件。

(6) 将封装的信息写入csv文件中时,csv格式的文件以纯文本形式存储表格数据,写入文件时可以用图7-1的格式写入,当此类文件用Excel格式打开的时候,展现信息如图7-11。

(7)在拼凑csv文件名时,需要获取当日的日期。

实验代码:

Good类:

/**
 * @author    商城进货交易记录程序设计
 *
 */
package LHB.pack;

public class Good {
	int id;
	String name;
	double price;
	int number;
	double money;
	String people;

	public Good(int id, String name, double price, int number, double money, String people) {
		this.id = id;
		this.name = name;
		this.price = price;
		this.number = number;
		this.money = money;
		this.people = people;
	}

	@Override
	public String toString() {
		String message = "进货记录编号:" + id + "  商品名称:" + name + " 联系人:" + people + " 单价:" + price + " 库存数量:" + number;
		return message;
	}

	public void setNumber(int number) {
		this.number = number;
	}
}

RecordGoodOrder类:

package LHB.pack;

import java.util.ArrayList;
import java.util.Scanner;

public class RecordGoodOrder {
	static ArrayList<Good> goodsList = new ArrayList<Good>();

	public static void main(String[] args) {
		init();
		for (int i = 0; i < goodsList.size(); i++) {
			System.out.println(goodsList.get(i));
		}
		while (true) {
			// 获取控制台输入的信息
			Scanner scan = new Scanner(System.in);
			System.out.print("请输入商品编号:");
			int goodId = scan.nextInt();
			Good stockGood = getgoodById(goodId);
			if (stockGood != null) {
				System.out.println("当前商品信息" + stockGood);
				System.out.print("请输入进货数量:");
				int goodNumber = scan.nextInt();
				if (goodNumber <= stockGood.number) {
					Good good = new Good(stockGood.id, stockGood.name, stockGood.price, goodNumber,
							stockGood.price * goodNumber, stockGood.people);
					FileUtil.savegood(good);
					stockGood.setNumber(stockGood.number + goodNumber);
				}
			} else {
				System.out.println("商品编号输入错误!");
			}
		}
	}

	private static void init() {
		Good good1 = new Good(1001, "宝马", 44.50, 100, 4450.00, "张三");
		Good good2 = new Good(1002, "奔驰", 108.00, 50, 5400.00, "李四");
		Good good3 = new Good(1003, "比亚迪", 99.00, 100, 9900.00, "张三");
		goodsList.add(good1);
		goodsList.add(good2);
		goodsList.add(good3);
	}

	private static Good getgoodById(int gookId) {
		for (int i = 0; i < goodsList.size(); i++) {
			Good thisGoods = goodsList.get(i);
			if (gookId == thisGoods.id) {
				return thisGoods;
			}
		}
		return null;
	}
}

FileUtil类:

package LHB.pack;

import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

public class FileUtil {
	public static final String SEPARATE_FIELD = ",";
	public static final String SEPARATE_LINE = "\r\n";

	public static void savegood(Good good) {
		// 判断本地是否存在此文件
		Date date = new Date();
		DateFormat format = new SimpleDateFormat("yyyyMMdd");
		String name = "进货记录" + format.format(date) + ".csv";
		InputStream in = null;
		try {
			in = new FileInputStream(name);
			if (in != null) {
				in.close();
				createFile(name, true, good);
			}
		} catch (FileNotFoundException e) {
			createFile(name, false, good);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public static void createFile(String name, boolean label, Good gooks) {
		BufferedOutputStream out = null;
		StringBuffer sbf = new StringBuffer();
		try {
			if (label) {
				out = new BufferedOutputStream(new FileOutputStream(name, true));
			} else {
				out = new BufferedOutputStream(new FileOutputStream(name));
				String[] fieldSort = new String[] { "商品编号", "商品名称", "购买数量", "单价", "总价", "联系人" };// 创建表头
				for (String fieldKye : fieldSort) {
					sbf.append(fieldKye).append(SEPARATE_FIELD);
				}
			}
			sbf.append(SEPARATE_LINE);
			sbf.append(gooks.id).append(SEPARATE_FIELD);
			sbf.append(gooks.name).append(SEPARATE_FIELD);
			sbf.append(gooks.number).append(SEPARATE_FIELD);
			sbf.append((double) gooks.price).append(SEPARATE_FIELD);
			sbf.append((double) gooks.money).append(SEPARATE_FIELD);
			sbf.append(gooks.people).append(SEPARATE_FIELD);
			String str = sbf.toString();
			byte[] b = str.getBytes();
			for (int i = 0; i < b.length; i++) {
				out.write(b[i]);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if (out != null)
					out.close();// 关闭输出流
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}
	}
}

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式up

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值