笔记

1.类的静态变量操作问题:

package first;
//静态变量
public class Properties {
	private  static int x=100;
	public static void main(String[] args) {
		Properties p1=new Properties();
		BaseClass one = new BaseClass();
		BaseClass two = new BaseClass();
		one.setAge(1);
		two.setAge(2);
		one.setId(0);
		two.setId(2);
		p1.x++;
		Properties p2=new Properties();
		p2.x++;
		System.out.println("1="+one+one.getId());
		System.out.println("2="+two+two.getId());
		//这里充分证明了不同对象调用类的静态属性,实际上是对同一属性进行操作
		System.out.println("x="+p1.x);
		p1=new Properties();
		p1.x++;
		System.out.println("x="+x);
		Properties.x++;
		//即使是不同对象,甚至是类名直接调用静态属性,实际上也是对同一属性进行操作
		System.out.println("x="+x);
	}

}
2.字符串递归算法翻转

package reverse;
//实现字符串翻转
public class Reversetest {
	public static String reverse(String a){
		if(a.length()<=1)
			return a;
		//核心就是把字符串中间分成左右,然后递归继续分左右,然后把右加左组成
		//1.分半
		//2.递归分半
		String left=a.substring(0,a.length()/2);
		String right=a.substring(a.length()/2,a.length());
		//递归实现,就是右+左实现翻转
		return reverse(right)+reverse(left);
	}
	public static void main(String[] args) {
		String a="abcdefg";
		System.out.println(reverse(a));
	}

}

3.编程实现文件拷贝

package IO;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;



/**实现文件拷贝的类
 * @author Administrator
 *
 */
public final class CopyFile {
  private CopyFile(){
     throw new AssertionError();
  }
    //不需要返回值,接受参数为(源文件,目标文件)
    public static void fileCopy(String source,String target)throws Exception{
        //将源文件写成输入流,简单创建对象
        try(InputStream shuru=new FileInputStream(source)){
            //将文件写成输出流
            try(OutputStream shuchu=new FileOutputStream(target)){
                byte[] buffer=new byte[4096];
                int byteToReader;
                //判断是否还能写
                while((byteToReader=shuru.read(buffer))!=-1){
                    //第一个参数为写入buffer中
                    shuchu.write(buffer, 0, byteToReader);
                }
            }
        }
        
    }
}
4.写一个方法,输入一个文件名和一个字符串,统计这个字符串在这个文件中出现的次数
</pre><pre name="code" class="java">package IO;

import java.io.BufferedReader;
import java.io.FileReader;


//写一个方法,输入一个文件名和一个字符串,统计这个字符串在这个文件中出现的次数
public final class CountFile {
    private CountFile(){
        throw new AssertionError();
    }
    
    /**
     * @param filename 文件名
     * @param words 字符串
     * @return 出现次数
     * @throws Exception
     */
    public static int fileCount(String filename,String words)throws Exception{
        int counter=0;
        //先读取文件,参数文件名
        try(FileReader fr=new FileReader(filename)){
            //写入缓存区,参数文件
            try(BufferedReader br=new BufferedReader(fr)){
                //定义变量表示该行
                String line=null;
                //若还有行,继续循环
                while((line=br.readLine())!=null){
                    //定义索引值,即该字符的索引
                    int index=-1;
                    //内循环条件:1.必须行长度大于该字符长度,才能继续找
                    //2.就是该字符在改行索引值大于0,获取索引的方法indexOf(相应字符串)
                    while(line.length()>=words.length()&&(index=line.indexOf(words))>=0){
                        //没找到该字符串的索引,即表示已经找到该字符串,从此处截掉,剩下的重新赋给line,继续寻找
                        line=line.substring(index+words.length());
                        //没截断一次,counter自加一次,表示找到一次
                        counter++;
                    }
                }
                    
                }
            }catch(Exception e){
        }
        //最后返回次数
        return counter;
    }
}

5.如何用Java代码列出一个目录下所有的文件?

//如果只要求列出当前文件夹下的文件:
package IO;

import java.io.File;

///该代码是只列出文件下所有文件
public class file {
    //打开目录下的所有文件,只需列出当前文件夹下的文件
    public static void main(String[] args) {
      File file=new File("路径");
      //类File中listFiles列出所有内容
      for(File temp:file.listFiles()){
          //判断temp是不是文件,若是打印其名
          if(temp.isFile()){
              System.out.println(temp.getName());
          }
      }
    }

    
}


//如果需要对文件夹继续展开:
package IO;

import java.io.File;

public class fileOpen {

    public static void main(String[] args) {
        //new File("路径") 获取目录路径
        showDirectory(new File("路径"));
}

    /**获取目录下所有的文件并打开
     * @param file 为文件目录
     */
    public static void showDirectory(File file) {
        walkDirectory(file,0);
    }

    /**
     * @param file:根目录
     * @param level:文件目录等级
     */
    public  static void walkDirectory(File file, int level) {
        //判断当前文件是否还能打开
        if(file.isDirectory()){
                //获取当前目录下的所有文件
                for(File temp:file.listFiles()){
                    //将当前文件重新传入,并文件目录等级加1
                    walkDirectory(temp,level+1);
                }
            }else{
                //若不能打开,进行for循环,逐层进行
                for(int i=0;i<level-1;i++){
                    System.out.println("\t");
                }
                //获取文件名
                System.out.println(file.getName());
            }
            
        }
        
    }
6. 用Java的套接字编程实现一个多线程的回显(echo)服务器

多线程的服务器,即NIO通信,一个连接对应多个线程

//服务端:
package NIO;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class ServerNIO {
    //定义服务器端口号
    private static final int serverPort=8090;
    
    public static void main(String[] args) {
        //创建ServerSocket对象,服务器端口号初始化
        try(ServerSocket server=new ServerSocket(serverPort)){
            System.out.println("服务器已经启动");
            while(true){
                //通过一个while循环进行不断监听,客户端Socket=(服务器)server.accept方法
                Socket client=server.accept();
                //通过一个请求创建一个线程
                new Thread(new ClientHandler(client)).start();
            }
        }catch(IOException e){
            e.printStackTrace();
        }
    }
    
    public static class ClientHandler implements Runnable{
        private Socket client;
        public ClientHandler(Socket client){
            this.client=client;
        }
        
        public void run(){
            //try(获取client发送流,将client)
            //输入:BufferedReader
            //输出:PrintWriter
            try(BufferedReader br=new BufferedReader(new InputStreamReader(client.getInputStream()));
                    PrintWriter pw=new PrintWriter(client.getOutputStream())){
                
                //msg为客户端发送的信息
                String msg=br.readLine();
                //获取客户端地址
                System.out.println(client.getInetAddress());
                System.out.println(msg);
                pw.println(msg);
                pw.flush();
            }catch(Exception e){
                e.printStackTrace();
            }
            finally{
                try {
                    client.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

}
//客户端:
package NIO;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;

public class ClientNIO {

    public static void main(String[] args) throws Exception{
        Socket client=new Socket("localhost",8090);
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入内容");
        String msg=sc.nextLine();
        sc.close();
        PrintWriter pw=new PrintWriter(client.getOutputStream());
        pw.println(msg);
        pw.flush();
        BufferedReader br=new BufferedReader(new InputStreamReader(client.getInputStream()));
        System.out.println();
        client.close();
    }

}







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值