【imuseum源码】【宁浩源码社区】【思源经纪crm源码】bufferedreader 源码

时间:2024-11-14 13:50:58 编辑:注册建站源码 来源:支付系统源码开源

1.java获取文件最后一行的源码几种方式
2.求Java记事本源代码
3.跪求一个Java编写的多人聊天程序源代码
4.java中如何实现从客户端发送文件到服务器端?

bufferedreader 源码

java获取文件最后一行的几种方式

       当我们在读取文件的时候,通常都是源码从前向后读取,那如果要读取文件的源码最后一行内容,要如何操作呢?

顺序遍历读取,源码直到文件最后一行publicstaticStringreadLastLineV0(Filefile){ StringlastLine="";try(BufferedReaderbufferedReader=newBufferedReader(newFileReader(file))){ StringcurrentLine="";while((currentLine=bufferedReader.readLine())!=null){ lastLine=currentLine;}}catch(Exceptione){ log.error("filereaderror,源码msg:{ }",e.getMessage(),e);}returnlastLine;}

       该方式很简单,从前向后读取即可,源码imuseum源码直到最后一行。源码

利用RandomAccessFile指定位置,源码从后向前读取publicstaticStringreadLastLineV1(Filefile){ //存储结果StringBuilderbuilder=newStringBuilder();try(RandomAccessFilerandomAccessFile=newRandomAccessFile(file,源码"r")){ //指针位置开始为0,所以最大长度为length-1longfileLastPointer=randomAccessFile.length()-1;//从后向前读取文件for(longfilePointer=fileLastPointer;filePointer!=-1;filePointer--){ //移动指针指向randomAccessFile.seek(filePointer);intreadByte=randomAccessFile.readByte();if(0xA==readByte){ //LF='\n'=0x0A换行if(filePointer==fileLastPointer){ //如果是源码最后的换行,过滤掉continue;}break;}if(0xD==readByte){ //CR='\r'=0x0D回车if(filePointer==fileLastPointer-1){ //如果是源码倒数的回车也过滤掉continue;}break;}builder.append((char)readByte);}}catch(Exceptione){ log.error("filereaderror,msg:{ }",e.getMessage(),e);}returnbuilder.reverse().toString();}

       该方式主要是利用RandomAccessFile可以seek到指定位置读取的方式。从文件的源码最后向前读取,当遇到0xA(换行)或者0xD(回车)时,源码利用StringBuilder缓存一下读取到的源码数据,最后将数据reverse即是源码最后一行数据。

利用commons-io中的ReversedLinesFileReader

       maven导入依赖

<dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.7</version></dependency>publicstaticStringreadLastLineV2(Filefile){ StringlastLine="";try(ReversedLinesFileReaderreversedLinesReader=newReversedLinesFileReader(file,Charset.defaultCharset())){ lastLine=reversedLinesReader.readLine();}catch(Exceptione){ log.error("filereaderror,msg:{ }",e.getMessage(),e);}returnlastLine;}

       该方式可以直接读取到最后一行数据。有兴趣的宁浩源码社区同学可以自行看一下源码,非常少。它的实现是思路是先将文件拆成多个FilePart。读取位置定位是基于SeekableByteChannel的position方法。而FilePart的readLine实现中,可以一次读取多个bytes。

总结

       以上三种读取文件最后一行的方法中,推荐使用commons-io中的ReversedLinesFileReader,使用方式也比较简单。思源经纪crm源码

求Java记事本源代码

       自己写的,能实现基本功能:

       import java.awt.BorderLayout;

       import java.awt.FileDialog;

       import java.awt.Font;

       import java.awt.datatransfer.Clipboard;

       import java.awt.datatransfer.DataFlavor;

       import java.awt.datatransfer.StringSelection;

       import java.awt.datatransfer.Transferable;

       import java.awt.datatransfer.UnsupportedFlavorException;

       import java.awt.event.ActionEvent;

       import java.awt.event.ActionListener;

       import java.io.BufferedReader;

       import java.io.BufferedWriter;

       import java.io.File;

       import java.io.FileNotFoundException;

       import java.io.FileReader;

       import java.io.FileWriter;

       import java.io.IOException;

       import javax.swing.JFrame;

       import javax.swing.JMenu;

       import javax.swing.JMenuBar;

       import javax.swing.JMenuItem;

       import javax.swing.JOptionPane;

       import javax.swing.JPanel;

       import javax.swing.JScrollPane;

       import javax.swing.JTextArea;

       import javax.swing.border.TitledBorder;

       /*因为根据个人的电脑路径可能有所偏差,没有源路径的情况下,设置默认保存路径为D盘根目录下

        * 若要选择保存其他地方,可以选择 另存为*/

       public class TestDemo extends JFrame {

        private static final long serialVersionUID = -L;

        private String url = null;//文件路径

        private String str=null;//复制或剪切 的字符串

        private StringSelection stringSelection=null;

        private Clipboard clipboard=new Clipboard(str);

        private Transferable transferable=null;

        private DataFlavor flavor=null;

        public TestDemo() {

        init();

        }

        private void init() {

        setTitle("我的记事本");

        setSize(, );

        setContentPane(createContentPane());//添加主面板

        }

       /*创建主面板*/

        private JPanel createContentPane() {

        JPanel pane = new JPanel(new BorderLayout());

        pane.add(BorderLayout.NORTH, createChocePane());//添加菜单栏

        pane.add(createAreaPane());//添加文本编辑区域

        return pane;

        }

       /*创建菜单栏,以及实现功能*/

        private JPanel createChocePane() {

        JPanel pane = new JPanel();

        JMenuBar menuBar1 = new JMenuBar();

        JMenu menu = new JMenu("文件");

        menuBar1.add(menu);

        JMenuItem menuIt1 = new JMenuItem("新建");

        JMenuItem menuIt2 = new JMenuItem("打开");

        JMenuItem menuIt3 = new JMenuItem("保存");

        JMenuItem menuIt4 = new JMenuItem("另存为");

        menu.add(menuIt1);

        menu.add(menuIt2);

        menu.add(menuIt3);

        menu.add(menuIt4);

        JMenuBar menuBar2 = new JMenuBar();

        JMenu menu2 = new JMenu("编辑");

        menuBar2.add(menu2);

        JMenuItem menuIt5 = new JMenuItem("复制");

        JMenuItem menuIt6 = new JMenuItem("剪切");

        JMenuItem menuIt7 = new JMenuItem("粘帖");

        menu2.add(menuIt5);

        menu2.add(menuIt6);

        menu2.add(menuIt7);

        JMenuBar menuBar3 = new JMenuBar();

        JMenu menu3 = new JMenu("帮助");

        menuBar3.add(menu3);

        JMenuItem menuIt8 = new JMenuItem("关于记事本");

        menu3.add(menuIt8);

        pane.add(menuBar1);

        pane.add(menuBar2);

        pane.add(menuBar3);

        menuIt1.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent e) {

        testArea.setText(null);

        }

        });

        menuIt2.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent arg0) {

        final FileDialog fd = new FileDialog(new JFrame(), "查找文件",

        FileDialog.LOAD);

        fd.setVisible(true);

        if (fd.getDirectory() != null && fd.getFile() != null) {

        testArea.setText(null);

        url = fd.getDirectory() + fd.getFile();

        try {

        BufferedReader in = new BufferedReader(new FileReader(

        url));

        for (int i = 0;; i++) {

        testArea.append(in.readLine());

        if (in.read() == -1) {

        break;

        } else

        continue;

        }

        } catch (FileNotFoundException e) {

        e.printStackTrace();

        } catch (IOException e) {

        e.printStackTrace();

        }

        }

        }

        });

        menuIt3.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent e) {

        if (url==null) {

        url="D:\\新建 文本文档.txt";

        }

        File f = new File(url);

        BufferedWriter out = null;

        try {

        out = new BufferedWriter(new FileWriter(url));

        f.createNewFile();

        out.append(testArea.getText());

        out.flush();

        } catch (IOException e1) {

        e1.printStackTrace();

        } finally {

        try {

        out.close();

        } catch (IOException e1) {

        e1.printStackTrace();

        }

        }

        }

        });

        menuIt4.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent arg0) {

        FileDialog fd = new FileDialog(new JFrame(), "保存文本",

        FileDialog.SAVE);

        fd.setVisible(true);

        if (url!=null) {

        File f = new File(url);

        BufferedWriter out = null;

        try {

        f.createNewFile();

        out = new BufferedWriter(new FileWriter(url));

        out.append(testArea.getText());

        out.flush();

        } catch (IOException e) {

        e.printStackTrace();

        } finally {

        try {

        out.close();

        } catch (IOException e) {

        e.printStackTrace();

        }

        }

        }

        }

        });

        menuIt5.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent e) {

        str=testArea.getSelectedText();

        stringSelection=new StringSelection(str);

        clipboard.setContents(stringSelection, null);

        }

        });

        menuIt6.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent arg0) {

        str=testArea.getSelectedText();

        stringSelection=new StringSelection(str);

        clipboard.setContents(stringSelection, null);

        int start=testArea.getSelectionStart();

        int end=testArea.getSelectionEnd();

        testArea.replaceRange( null,start,end);

        }

        });

        menuIt7.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent e) {

        transferable=clipboard.getContents(this);

        flavor=DataFlavor.stringFlavor;

        if (transferable.isDataFlavorSupported(flavor)) {

        int start=testArea.getSelectionStart();

        int end=testArea.getSelectionEnd();

        testArea.replaceRange( null,start,end);

        int pos=testArea.getCaretPosition();

        try {

        str=(String)transferable.getTransferData(flavor);

        testArea.insert(str, pos);

        } catch (UnsupportedFlavorException e1) {

        e1.printStackTrace();

        } catch (IOException e1) {

        e1.printStackTrace();

        }

       }

        }

        });

        menuIt8.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent e) {

        JOptionPane.showMessageDialog(null,"功能简单,绝对原创 ");

        }

        });

        return pane;

        }

        JTextArea testArea;

        private JScrollPane createAreaPane() {

        JScrollPane pane = new JScrollPane();

        pane.setBorder(new TitledBorder("编辑区域"));

        testArea = new JTextArea();

        testArea.setFont(new Font("宋体", Font.BOLD, ));

        testArea.setLineWrap(true);

        pane.getViewport().add(testArea);

        return pane;

        }

        public static void main(String[] args) {

        TestDemo td = new TestDemo();

        td.setVisible(true);

        }

       }

跪求一个Java编写的多人聊天程序源代码

       import java.io.InputStream;

       import java.io.DataInputStream;

       import java.io.InputStreamReader;

       import java.io.OutputStream;

       import java.io.DataOutputStream;

       import java.io.BufferedReader;

       import java.net.ServerSocket;

       import java.net.Socket;

       import java.io.IOException;

       import java.util.Date;

       class Server

       {

       public Server()

       {

       try

       {

       ServerSocket s=new ServerSocket();

       Socket ss=s.accept();

       OutputStream out=ss.getOutputStream();

       DataOutputStream dout=new DataOutputStream(out);

       InputStream in=ss.getInputStream();

       DataInputStream din=new DataInputStream(in);

       System.out.print(din.readUTF()+"!");

       dout.writeUTF("你已经连接到服务器"+"\t"+"你的地址:"+ss.getInetAddress()+"\t"

       +"你的链接端口:"+ss.getLocalPort()+"\n");

       new ReadMessage(din).start();

       new SendMessage(dout).start();

       }

       catch (IOException e)

       {

       e.printStackTrace();

       }

       }

       public static void main(String[] args)

       {

       new Server();

       }

       }

       //接受客户端信息

       class ReadMessage extends Thread

       {

       private DataInputStream din;

       public ReadMessage(DataInputStream din)

       {

       this.din=din;

       }

       public void run()

       {

       String str;

       try

       {

       while (true)

       {

       str=din.readUTF();

       System.out.println(new Date().toLocaleString()+"客户端说:"+str);

       if (str.equals("bye"))

       {

       System.out.println("客户端下线!");

       break;

       }

       }

       }

       catch (IOException e)

       {

       e.printStackTrace();

       }

       }

       }

       // 发出服务器信息

       class SendMessage extends Thread

       {

       private DataOutputStream dout;

       public SendMessage(DataOutputStream dout)

       {

       this.dout=dout;

       }

       public void run()

       {

       InputStreamReader inr=new InputStreamReader(System.in);

       BufferedReader buf=new BufferedReader(inr);

       String str;

       try

       {

       while(true)

       {

       str=buf.readLine();

       dout.writeUTF(str);

       if (str.equals("bye"))

       {

       System.out.println("服务器退出!");

       System.exit(1);

       }

       }

       }

       catch (IOException e)

       {

       e.printStackTrace();

       }

       }

       }

       import java.io.InputStream;

       import java.io.DataInputStream;

       import java.io.InputStreamReader;

       import java.io.OutputStream;

       import java.io.DataOutputStream;

       import java.io.BufferedReader;

       import java.net.Socket;

       import java.io.IOException;

       import java.util.Date;

       class Client

       {

       public Client()

       {

       try

       {

       Socket s=new Socket("..1.2",卡盟5.0源码);

       InputStream in=s.getInputStream();

       DataInputStream din=new DataInputStream(in);

       OutputStream out=s.getOutputStream();

       DataOutputStream dout=new DataOutputStream(out);

       dout.writeUTF("服务器你好!我是客户端");

       System.out.println(din.readUTF());

       new Thread(new SenderMessage(dout)).start();

       new Thread(new ReaderMessage(din)).start();

       }

       catch (IOException e)

       {

       e.printStackTrace();

       }

       }

       public static void main(String[] args)

       {

       new Client();

       }

       }

       class ReaderMessage implements Runnable

       {

       private DataInputStream din;

       public ReaderMessage(DataInputStream din)

       {

       this.din=din;

       }

       public void run()

       {

       String str;

       try

       {

       while(true)

       {

       str=din.readUTF();

       System.out.println(new Date().toLocaleString()+"服务器说:"+str);

       if (str.equals("bye"))

       {

       System.out.println("服务器已经关闭,此程序自动退出!");

       break;

       }

       }

       }

       catch (IOException e)

       {

       e.printStackTrace();

       }

       }

       }

       class SenderMessage implements Runnable

       {

       private DataOutputStream dout;

       public SenderMessage(DataOutputStream dout)

       {

       this.dout=dout;

       }

       public void run()

       {

       String str;

       InputStreamReader inf=new InputStreamReader(System.in);

       BufferedReader buf=new BufferedReader(inf);

       try

       {

       while (true)

       {

       str=buf.readLine();

       dout.writeUTF(str);

       if (str.equals("bye"))

       {

       System.out.println("客户端自己退出!");

       System.exit(1);

       }

       }

       }

       catch (IOException e)

       {

       e.printStackTrace();

       }

       }

       }

java中如何实现从客户端发送文件到服务器端?

       服务器端源码:

       import java.io.BufferedReader;

       import java.io.File;

       import java.io.FileNotFoundException;

       import java.io.FileOutputStream;

       import java.io.IOException;

       import java.io.InputStream;

       import java.io.InputStreamReader;

       import java.net.ServerSocket;

       import java.net.Socket;

       /

**

       

*

        * 文件名:ServerReceive.java

        * 实现功能:作为服务器接收客户端发送的文件

       

*

        * 具体实现过程:

        * 1、建立SocketServer,等待客户端的连接

        * 2、当有客户端连接的时候,按照双方的渲染管线流程 源码约定,这时要读取一行数据

        * 其中保存客户端要发送的文件名和文件大小信息

        * 3、根据文件名在本地创建文件,并建立好流通信

        * 4、循环接收数据包,将数据包写入文件

        * 5、当接收数据的长度等于提前文件发过来的文件长度,即表示文件接收完毕,关闭文件

        * 6、文件接收工作结束

       public class ServerReceive {

        public static void main(String[] args) {

        /**与服务器建立连接的通信句柄*/

        ServerSocket ss = null;

        Socket s = null;

        /**定义用于在接收后在本地创建的文件对象和文件输出流对象*/

        File file = null;

        FileOutputStream fos = null;

        /**定义输入流,使用socket的inputStream对数据包进行输入*/

        InputStream is = null;

        /**定义byte数组来作为数据包的存储数据包*/

        byte[] buffer = new byte[ * 5];

        /**用来接收文件发送请求的字符串*/

        String comm = null;

       /**建立socekt通信,等待服务器进行连接*/

        try {

        ss = new ServerSocket();

        s = ss.accept();

        } catch (IOException e) {

        e.printStackTrace();

        }

       /**读取一行客户端发送过来的约定信息*/

        try {

        InputStreamReader isr = new InputStreamReader(s.getInputStream());

        BufferedReader br = new BufferedReader(isr);

        comm = br.readLine();

        } catch (IOException e) {

        System.out.println("服务器与客户端断开连接");

        }

        /**开始解析客户端发送过来的请求命令*/

        int index = comm.indexOf("/#");

        /**判断协议是否为发送文件的协议*/

        String xieyi = comm.substring(0, index);

        if(!xieyi.equals("")){

        System.out.println("服务器收到的协议码不正确");

        return;

        }

        /**解析出文件的名字和大小*/

        comm = comm.substring(index + 2);

        index = comm.indexOf("/#");

        String filename = comm.substring(0, index).trim();

        String filesize = comm.substring(index + 2).trim();

       /**创建空文件,用来进行接收文件*/

        file = new File(filename);

        if(!file.exists()){

        try {

        file.createNewFile();

        } catch (IOException e) {

        System.out.println("服务器端创建文件失败");

        }

        }else{

        /**在此也可以询问是否覆盖*/

        System.out.println("本路径已存在相同文件,进行覆盖");

        }

        /**以上就是客户端代码中写到的服务器的准备部分*/

       /

**

        * 服务器接收文件的关键代码*/

        try {

        /**将文件包装到文件输出流对象中*/

        fos = new FileOutputStream(file);

        long file_size = Long.parseLong(filesize);

        is = s.getInputStream();

        /**size为每次接收数据包的长度*/

        int size = 0;

        /**count用来记录已接收到文件的长度*/

        long count = 0;

        /**使用while循环接收数据包*/

        while(count < file_size){

        /**从输入流中读取一个数据包*/

        size = is.read(buffer);

        /**将刚刚读取的数据包写到本地文件中去*/

        fos.write(buffer, 0, size);

        fos.flush();

        /**将已接收到文件的长度+size*/

        count += size;

        System.out.println("服务器端接收到数据包,大小为" + size);

        }

        } catch (FileNotFoundException e) {

        System.out.println("服务器写文件失败");

        } catch (IOException e) {

        System.out.println("服务器:客户端断开连接");

        }finally{

        /

**

        * 将打开的文件关闭

        * 如有需要,也可以在此关闭socket连接

        * */

        try {

        if(fos != null)

        fos.close();

        } catch (IOException e) {

        e.printStackTrace();

        }//catch (IOException e)

        }//finally

        }//public static void main(String[] args)

       }//public class ServerReceive

       客户端源码:

       import java.io.File;

       import java.io.FileInputStream;

       import java.io.FileNotFoundException;

       import java.io.IOException;

       import java.io.OutputStream;

       import java.io.PrintStream;

       import java.net.Socket;

       /

**

       

*

        * 文件名:ClientSend.java

        * 实现功能:作为客户端向服务器发送一个文件

       

*

        * 具体实现过程:

        * 1、建立与服务器端的连接,IP:.0.0.1, port:

        * 2、将文件的名字和大小通过自定义的文件传输协议,发送到服务器

        * 3、循环读取本地文件,将文件打包发送到数据输出流中

        * 4、关闭文件,结束传输

       

*

        * */

       public class ClientSend {

        public static void main(String[] args) {

        /**与服务器建立连接的通信句柄*/

        Socket s = null;

        /**定义文件对象,即为要发送的文件

        * 如果使用绝对路径,不要忘记使用'/'和'\'的区别

        * 具体区别,请读者自行查询

        * */

        File sendfile = new File("API.CHM");

        /**定义文件输入流,用来打开、读取即将要发送的文件*/

        FileInputStream fis = null;

        /**定义byte数组来作为数据包的存储数据包*/

        byte[] buffer = new byte[ * 5];

        /**定义输出流,使用socket的outputStream对数据包进行输出*/

        OutputStream os = null;

       /**检查要发送的文件是否存在*/

        if(!sendfile.exists()){

        System.out.println("客户端:要发送的文件不存在");

        return;

        }

       /**与服务器建立连接*/

        try {

        s = new Socket(".0.0.1", );

        }catch (IOException e) {

        System.out.println("未连接到服务器");

        }

        /**用文件对象初始化fis对象

        * 以便于可以提取出文件的大小

        * */

        try {

        fis = new FileInputStream(sendfile);

        } catch (FileNotFoundException e1) {

        e1.printStackTrace();

        }

       /**首先先向服务器发送关于文件的信息,以便于服务器进行接收的相关准备工作

        * 具体的准备工作,请查看服务器代码。

       

*

        * 发送的内容包括:发送文件协议码(此处为)/#文件名(带后缀名)/#文件大小

        * */

        try {

        PrintStream ps = new PrintStream(s.getOutputStream());

        ps.println("/#" + sendfile.getName() + "/#" + fis.available());

        ps.flush();

        } catch (IOException e) {

        System.out.println("服务器连接中断");

        }

       /

**

        * 此处睡眠2s,等待服务器把相关的工作准备好

        * 也是为了保证网络的延迟

        * 读者可自行选择添加此代码

        * */

        try {

        Thread.sleep();

        } catch (InterruptedException e1) {

        e1.printStackTrace();

        }

       /**之前的准备工作结束之后

        * 下面就是文件传输的关键代码

        * */

        try {

        /**获取socket的OutputStream,以便向其中写入数据包*/

        os = s.getOutputStream();

        /** size 用来记录每次读取文件的大小*/

        int size = 0;

        /**使用while循环读取文件,直到文件读取结束*/

        while((size = fis.read(buffer)) != -1){

        System.out.println("客户端发送数据包,大小为" + size);

        /**向输出流中写入刚刚读到的数据包*/

        os.write(buffer, 0, size);

        /**刷新一下*/

        os.flush();

        }

        } catch (FileNotFoundException e) {

        System.out.println("客户端读取文件出错");

        } catch (IOException e) {

        System.out.println("客户端输出文件出错");

        }finally{

        /

**

        * 将打开的文件关闭

        * 如有需要,也可以在此关闭socket连接

        * */

        try {

        if(fis != null)

        fis.close();

        } catch (IOException e) {

        System.out.println("客户端文件关闭出错");

        }//catch (IOException e)

        }//finally

        }//public static void main(String[] args)

       }//public class ClientSend