import java.io.File;

import java.io.FileNotFoundException;

import java.io.FileReader;

import java.io.FileWriter;

import java.io.IOException;

import java.util.Collection;

import java.util.HashMap;

import java.util.Iterator;

import java.util.Scanner;

import java.util.Set;

public class Test {

public static int ci = 0;  //定义次数

public static void xitong() {

String path = "C:\\Users\\lenovo\\Desktop\\Test.txt";//文件路径

File file = new File(path);

file.delete();//删除原来文件

File parentFile = file.getParentFile();//得到上一级文件夹

if(!parentFile.exists())

{

parentFile.mkdirs();//创建当前文件夹,以及父路径不存在的文件夹

}

if(!file.exists())

{

try

{

file.createNewFile();//创建一个空文件

} catch (IOException e)

{

// TODO Auto-generated catch block

e.printStackTrace();

}

}

User[] user = new User[6];//客户数组

user[0] = new User("admin", "admin123", "11111111111");

user[1] = new User("ABC", "abcabc", "11111111111");

user[2] = new User("BCD", "bcdbcd", "11111111111");

user[3] = new User("CDE", "cdecde", "11111111111");

user[4] = new User("DEF", "defdef", "11111111111");

user[5] = new User("EFG", "efgefg", "11111111111");

for (int i = 0; i < user.length; i++) {

writer(user[i], path);//将客户信息写入文件

}

ZhuJieMian jieMian = new ZhuJieMian();

boolean m = false;

while(!m)

{

jieMian.denglu();//输出想要的字符串

Scanner scan = new Scanner(System.in);

int i = scan.nextInt();//选择功能

while (!(i == 1 || i == 2 )) 

{

System.out.println("输入错误,请重新输入!");

i = scan.nextInt();

}

switch (i) 

{

case 1:

ZhuCe ce = new ZhuCe();//注册类

writer(ce.zhuce(), path);

m = false;

break;

case 2:

boolean b = true;

Scanner scan1 = new Scanner(System.in);

A:while (b)

{

DengLu(path, scan, scan1,file);//登陆方法

}

break;

default:

break;

}

}

}

private static void DengLu(String path, Scanner scan, Scanner scan1,File file) {

System.out.println("请输入用户名:");

String inputStr = scan1.nextLine();

FileReader fr = null;

StringBuffer buffer = null;

try

{

fr = new FileReader(path);

int len = 0;

char[] cbuf = new char[500];

buffer = new StringBuffer();

while(-1 != (len  = fr.read(cbuf)))

{

buffer.append(new String(cbuf,0,len));//将文件中的字符串写入buffer

}

} catch (FileNotFoundException e)

{

e.printStackTrace();

} catch (IOException e)

{

e.printStackTrace();

}

String[] read = buffer.toString().split(";");//将buffer分解成数组

String[][] read1 = new String[read.length][];

for (int j = 0; j < read1.length; j++) {

read1[j] = read[j].split(",");

}

HashMap<String, User> hashMap = new HashMap<>();

for (int j = 0; j < read1.length; j++) {

hashMap.put(read1[j][0], new User(read1[j][0], read1[j][1], read1[j][2]));//将客户信息写入hashMap容器

}

if(hashMap.get(inputStr) != null)

{

System.out.println("请输入密码:");

String inputStr1 = scan1.nextLine();

if(inputStr1.equals(hashMap.get(inputStr).password))//判断密码

{

if(inputStr1.equals("admin123"))//当客户名为管理员的用户名

{

boolean d = true;

while(d)

{

System.out.println("用户信息:");

Collection<User> values = hashMap.values();

// 第一种

// 获取map中保存key的容器

Set<String> keySet = hashMap.keySet();

Iterator<String> iterator = keySet.iterator();

while(iterator.hasNext())

{

String key = iterator.next();

User valus = hashMap.get(key);

if(valus.user_name.equals("admin"))

{

continue;

}

System.out.println("用户名: "+valus.user_name+",密码: "+valus.password+",电话: "+valus.tel);

}

System.out.println("你可以选择删除功能,确认请输入1,输入2返回上一级,其他输入退出系统!");

String j = scan.next();

if(j.equals("1"))

{

boolean c = true;

while(c)

{

System.out.println("请输入你要删除用户的用户名:");

String string1 = scan.next();

if(hashMap.get(string1) != null)

{

hashMap.remove(string1);

c = false;

}else

{

System.out.println("输入错误,请重新输入!");

}

}

}else if(j.equals("2"))

{

d = false;

}else 

{

System.out.println("感谢您应用本系统,再见!");

file.delete();

}

}

}else

{

System.out.println("登录成功!");

file.delete();

}

}

else

{

System.out.println("输入错误,请重新输入!");

}

}else

{

System.out.println("输入错误,请重新输入!");

}

}

public static void writer(User user,String path) //将客户信息写入文件

{

String str = user.toString();

FileWriter fw = null;

try

{

   fw = new FileWriter(path,true);

   fw.write(str);

   fw.flush();

} catch (IOException e)

{

// TODO Auto-generated catch block

e.printStackTrace();

}finally

{

if(fw != null)

{

try

{

fw.close();

} catch (IOException e)

{

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}

}

这是一个用户登录注册的作业,虽然看是简单,当时需要一定的java基础和逻辑能力,我们需要不断练习,熟练代码。

StringBuffer  代表可变的字符序列

     //构造方法

StringBuffer buffer = new StringBuffer();//默认16  StringBuffer buffer1 = new StringBuffer("123");//字符串长度+16  StringBuffer buffer2 = new StringBuffer(20);//设置长度   buffer1.append(123).append(12.4).append(true).append("asd");  //如果添加的数据超出缓冲区的长度,他会自动扩充,扩充的长度为原长度的两倍+ 2  System.out.println(buffer1.toString());  //StringBuffer特有的,对StringBuffer立面保存的字符进行操作,但是不会产生新的对象  buffer1.insert(1, "=====");  System.out.println(buffer1.toString());  buffer1.delete(2, 5);//包左不包右  System.out.println(buffer1.toString());  buffer1.reverse();//反向字符串  System.out.println(buffer1.toString());  buffer1.replace(0, 5, "++++");//包左不包右  System.out.println(buffer1.toString());  //跟字符串类似  System.out.println(buffer1.capacity()+ "1");//空间长度  System.out.println(buffer1.length() + "a");  buffer1.setLength(10);  System.out.println(buffer1.capacity()+ "2");  System.out.println(buffer1.length() + "b");//实际字符长度  System.out.println(buffer1.toString());  System.out.println(buffer1.charAt(5));

Character  静态方法:

isDigit(char ch) 判断是否是数字
isLetter(char ch)  判断是否字母
isLowerCase(char ch) 
          确定指定字符是否为小写字母。
isUpperCase(char ch) 
          确定指定字符是否为大写字母。

单实例模式   单态模式  SingleTon

步骤:

1、私有化构造方法

2、声明一个private final static 的成员变量,类型为当前类型,去实例化一个当前类型的对象。

3、声明一个public static的方法用户获取当前类型的成员变量

异常捕获:

   try{

       //可能出现异常的地方,

   }catch(Exception e)

{

     System.out.println(e.getMessage());//得到异常信息

   e.printStackTrace();//打印异常栈信息 

}

Exception

        RuntimeException 运行时异常

                   运行时出现的错误 ,而且这类异常出现的概率比较高,所以一般我们是不会去捕获

           常见运行时异常:

                 ArithmeticException 数学运算异常

                 NullPointerException  空指针异常

                 StringIndexOutOfBoundsException  字符串索引越界

                 ArrayIndexOutOfBoundsException   数组下标越界

                 NegativeArraySizeException    数组定义异常

                 IllegalArgumentException 非法参数异常

           注意: 不需要try{}catch(){}捕获,要看的懂异常的原因,通过修改代码区捕获它。

Check Exception 检查异常

             在语法上需要去捕获 

             IOException

try{}catch(){}catch(){}

 try之后可以有多个catch  但是要保证catch之后捕获的异常类型要有一定的顺序(子类在上父类在下)

finally  在catch之后:不管try中代码有没有出现错误都必须执行

throws   

   在方法之后声明调用该方法可能抛出某种异常,可以声明抛出多个。

   RuntimeException可以不用声明被捕获

throw 

   throw在具体的某个位置抛出某个异常,一旦被执行,以下的代码就结束。

     但是可以用try{}catch(){}直接捕获

重写中方法异常抛出的声明:

1、重写是可以不声明抛出异常

2、重写方法不可以抛出被重新方法声明之外的异常(运行时异常除外)

自定义异常:

 使用自定义异常一般有如下步骤:

1、通过继承 java.lang.Exception 类声明自己的异常类。

2、在方法适当的位置 生成自定义异常的实例,并用throw 语句抛出。

3、 在方法的声明部分用throws 语句声明该方法可能抛出的异常。

Set 接口

  无序不可重复

 无序:不按照添加先后,添加完之后有一定的顺序

  Set接口没有新增的方法,所有的放都是Collection继承过来的。

主要实现类:

     HashSet

         顺序:按hash码排列

List接口

    有顺序可以重复

     F838BAE70D214A818A943D43512856DA

     主要实现类:

           ArrayList

          LinkedList

list新增了

 remove(int index)//移除索引的元素

 remove(Object o)//具体的元素

Iterator  迭代器

  Collection接口 有声明 iterator() 方法

1D793B2A88A54142AE32E05F06651286

ArrayList中 :

  toArray()  把容器里面的元素转换成数组里面的元素

  toArray(T[] t)声明一个数组,然后把容器里面的元素按照原来顺序赋值到数组当中

removeRange(int fromIndex, int toIndex)
          移除列表中索引在 fromIndex(包括)和 toIndex(不包括)之间的所有元素。(包级)

注意: ArrayList中的常用API要熟练

容器:

LinkedList

    

addFirst(E e)
          将指定元素插入此列表的开头。
addLast(E e)
          将指定元素添加到此列表的结尾。
pop()
          从此列表所表示的堆栈处弹出一个元素。
push(E e)
          将元素推入此列表所表示的堆栈。

Map

    key - value  保存数据

1、key是不可以重复

2、value是可以重复的

HashMap

40C3B50F84114631991525DA119E1AB6

hashmap数据添加是无序

  按照key的hashcode排序

 作为key的类型,必须重写hashcode  equlse

map遍历

// 第一种

// 获取map中保存key的容器

  Set<String> keySet = hashMap.keySet();

  Iterator<String> iterator = keySet.iterator();

  while(iterator.hasNext())

  {

   String key = iterator.next();

   String valus = hashMap.get(key);

   System.out.println("key:" + key + "- value:" + valus);

  }

 

  //第二种

  Set<Entry<String, String>> entrySet = hashMap.entrySet();

  Iterator<Entry<String, String>> iterator1 = entrySet.iterator();

  while (iterator.hasNext())

  {

   Entry<String, String> next = iterator1.next();

   String key = next.getKey();

   String value = next.getValue();

   System.out.println("key:" + key + "- value:" + value);

  }

//建议使用第一种

工具类:

Arrays    数组的工具类

9DB58CADB7B34D99A3130188DE152ADC

Collections

    0B95ED6B7AA24C81AED0E1A76134B826

Comparable  //让实现这个接口的对象具有比较大小的能力

Compartor  //比较者 

9D959899D7AE46E9841A3D6FA34B184A

File

   抽象路径   C: + File.separator + java + File.separator  + day01

 绝对路径 E:\FA01

 相对路径: \day01

CE7F4ECA85D442FD97E3ACD4B9058149

//文件过滤器接口

class MyFilter implements FilenameFilter

{

 public boolean isPPt(String name)

 {

  if(name.toLowerCase().endsWith(".ppt") || name.toLowerCase().endsWith(".pptx"))

  {

   return true;

  }

  return false;

 }

 @Override

 public boolean accept(File dir, String name)

 {

  return isPPt(name);

 }

 

}

字节流:

  节点流:

  FileInputStream

  FileOutPutStream

  注意: 一般都去读取图片、文件

  

  处理流: 套在其他节点流或者处理流之上的流

    缓存流  BufferedOutputStream   (前提:节点流存在  只是性能上面有所提升)

字符流: 读文本

  节点流

  FileWriter  字符输出流

  FileReader  字符输入流

  

   处理流:

     缓存流  BufferedReader   新增readLine() 一次读取一行,如果到末尾就返回null  

         BufferedWriter    新增 newLine()  换行