1.IO流的概念
Java中的IO(input和output)是实现输入和输出的基础,可以方便的实现数据的输入和输出操作。java.io 包下提供了大量的供我们使用的操作【流】的方法和接口,用于进行各类数据的处理和传输。
2.流的分类
按照流的 流向分 可分为:
输入流: 只能从中读取数据,而不能向其写入数据。 输出流:只能向其写入数据,而不能向其读取数据。
按照操作单元划分 可分为:
字节流:是一个字节一个字节的读取或写入 字符流:是一个字符一个字符的读取或写入,一个字符就是两个字节,主要用来处理字符。
按照角色划分
节点流:直接从/向一个特定的IO设备(如磁盘,网络)读/写数据的流,称为节点流 。 处理流:“连接”在已存在的流(节点流或处理流)之上通过对数据的处理为程序提供更为强大的读写功能的流。
Java输入/输出流体系中常用的流的分类表
3.进行商品管理系统的代码编写
(1)新建一个商品类 用于储存 商品的信息
private static class Goods {
private int id;
private String name;
private int price;
public Goods ( ) {
}
public Goods ( int id, String name, int price) {
this . id = id;
this . name = name;
this . price = price;
}
public int getId ( ) {
return id;
}
public void setId ( int id) {
this . id = id;
}
public String getName ( ) {
return name;
}
public void setName ( String name) {
this . name = name;
}
public int getPrice ( ) {
return price;
}
public void setPrice ( int price) {
this . price = price;
}
}
(2)运用switch语句让用户进行输入来选择使用的功能
import java. io. * ;
import java. util. * ;
private static Scanner scanner = new Scanner ( System . in) ;
private static final String PATH = "path" ;
public static void main ( String [ ] args) {
while ( true ) {
System . out. println ( "请选择功能:1、插入新商品 2、删除商品 3、修改商品 4,输出所有商品 5、查找一个商品 6,退出" ) ;
int function = scanner. nextInt ( ) ;
switch ( function) {
case 1 :
insert ( ) ;
break ;
case 2 :
delete ( ) ;
break ;
case 3 :
update ( ) ;
break ;
case 4 :
selectAll ( ) ;
break ;
case 5 :
findOne ( ) ;
break ;
case 6 :
System . exit ( - 1 ) ;
break ;
}
}
}
(3)写几个 公共的方法 减少代码的冗余 提高代码的复用率
private static List < Goods > findAllGoods ( ) {
List < Goods > list = new ArrayList < > ( ) ;
try ( Reader reader = new FileReader ( Shop . PATH) ;
BufferedReader bufferedReader = new BufferedReader ( reader) ;
) {
String goods;
while ( ( goods = bufferedReader. readLine ( ) ) != null ) {
String [ ] goodElem = goods. split ( " " ) ;
Goods goodsItem = new Goods ( Integer . parseInt ( goodElem[ 0 ] ) ,
goodElem[ 1 ] ,
Integer . parseInt ( goodElem[ 2 ] ) ) ;
list. add ( goodsItem) ;
}
} catch ( IOException e) {
e. printStackTrace ( ) ;
}
return list;
}
public static void writer ( List < Goods > allGoods, Boolean append) {
try ( Writer writer = new FileWriter ( Shop . PATH, append) ;
BufferedWriter bufferedWriter = new BufferedWriter ( writer) ;
) {
for ( Goods goods : allGoods) {
bufferedWriter. write ( goods. getId ( ) + " " + goods. getName ( ) + " " + goods. getPrice ( ) ) ;
bufferedWriter. newLine ( ) ;
}
} catch ( IOException e) {
e. printStackTrace ( ) ;
}
}
(4)添加商品的功能
private static void insert ( ) {
boolean flag = true ;
Integer id = null ;
while ( flag) {
System . out. println ( "请输入商品编号:" ) ;
id = scanner. nextInt ( ) ;
final int i = id;
Optional < Goods > first = findAllGoods ( ) . stream ( ) . filter ( goods -> goods. getId ( ) == i) . findFirst ( ) ;
flag = first. isPresent ( ) ;
if ( flag) {
System . out. println ( "这个编号已经存在" ) ;
}
}
System . out. println ( "请输入商品名字" ) ;
String name = scanner. next ( ) ;
System . out. println ( "请输入商品价格" ) ;
int price = scanner. nextInt ( ) ;
writer ( Arrays . asList ( new Goods ( id, name, price) ) , true ) ;
}
(5)删除商品的功能
private static void delete ( ) {
System . out. println ( "请输入商品编号:" ) ;
int id = scanner. nextInt ( ) ;
List < Goods > allGoods = findAllGoods ( ) ;
Iterator < Goods > iterator = allGoods. iterator ( ) ;
while ( iterator. hasNext ( ) ) {
Goods goods = iterator. next ( ) ;
if ( goods. getId ( ) == id) {
iterator. remove ( ) ;
}
}
writer ( allGoods, false ) ;
}
(6)修改商品信息的功能
private static void update ( ) {
System . out. println ( "请输入商品编号:" ) ;
int id = scanner. nextInt ( ) ;
System . out. println ( "请输入商品名字" ) ;
String name = scanner. next ( ) ;
System . out. println ( "请输入商品价格" ) ;
Integer price = scanner. nextInt ( ) ;
List < Goods > allGoods = findAllGoods ( ) ;
Iterator < Goods > iterator = allGoods. iterator ( ) ;
while ( iterator. hasNext ( ) ) {
Goods goods = iterator. next ( ) ;
if ( goods. getId ( ) == id) {
goods. setName ( name) ;
goods. setPrice ( price) ;
}
}
writer ( allGoods, false ) ;
}
(7)打印所有商品信息的功能
private static void selectAll ( ) {
List < Goods > allGoods = findAllGoods ( ) ;
for ( Goods goods : allGoods) {
System . out. println ( goods. getId ( ) + " " + goods. getName ( ) + " " + goods. getPrice ( ) ) ;
}
}
(8)查找一个商品的功能
private static void findOne ( ) {
System . out. println ( "请输入商品编号:" ) ;
int id = scanner. nextInt ( ) ;
List < Goods > allGoods = findAllGoods ( ) ;
Optional < Goods > first = allGoods. stream ( ) . filter ( goods -> goods. getId ( ) == id) . findFirst ( ) ;
first. ifPresent ( goods -> {
System . out. println ( goods. getId ( ) + " " + goods. getName ( ) + " " + goods. getPrice ( ) ) ;
} ) ;
}
4.实现的效果
以上就是 java的IO流实现的基于本地文件的商品管理系统的全部内容!