java的io的问题 使用java输出文本到文本文件,但是打开文件没有得到输出的内容

试了好多函数,但是就是没有最后输出到文本文件,程序没有报错,需要用的flush(),也用了,最后关闭输出函数也关闭了,但是就是没有在文本文件中得到从java中输出的内容,还有什么地方需要注意的,

是我的路径表示错误了,应该都用\的,

3个回答

把代码贴出来看看,-------

贴出来代码看看吧!空口说白话啊

没有代码没法看错误啊

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
java.io.FileNotFoundException问题
package com.luceneheritrixbook.extractor.pconline.mobile; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.util.Date; import org.htmlparser.Node; import org.htmlparser.NodeFilter; import org.htmlparser.filters.AndFilter; import org.htmlparser.filters.HasAttributeFilter; import org.htmlparser.filters.NotFilter; import org.htmlparser.filters.OrFilter; import org.htmlparser.filters.TagNameFilter; import org.htmlparser.tags.ImageTag; import org.htmlparser.tags.TableColumn; import org.htmlparser.util.NodeList; import com.luceneheritrixbook.extractor.Extractor; import com.luceneheritrixbook.extractor.com163.Extract163Moblie; import com.luceneheritrixbook.util.StringUtils; public class ExtractPconlineMoblie extends Extractor { public void extract() { BufferedWriter bw = null; //创建属性过滤器 NodeFilter attributes_filter = new AndFilter(new TagNameFilter("td"), new OrFilter(new HasAttributeFilter("class", "td1"),new HasAttributeFilter("class", "td2")) ); //创建标题过滤器 NodeFilter title_filter = new TagNameFilter("h1"); /* NodeFilter title_filter = new AndFilter(new TagNameFilter("h1"), new AndFilter(new HasAttributeFilter("class", "praameters"), new NotFilter(new HasAttributeFilter("width")))); */ //创建图片过滤器 NodeFilter image_filter = new AndFilter( new TagNameFilter("img"), // new HasAttributeFilter("class", "product-img")); new HasAttributeFilter("class", "bigimg")); //提取标题信息 try { //Parser根据过滤器返回所有满足过滤条件的节点 NodeList title_nodes = this.getParser().parse(title_filter); //遍历所有节点 long num = title_nodes.size(); for (int i = 0; i < title_nodes.size(); i++) { Node node_title=title_nodes.elementAt(i); //提取标题信息 //TableColumn node = (TableColumn) title_nodes.elementAt(i); //用空格分割节点内部html文本 String[] names = node_title.toPlainTextString().split(" "); StringBuffer title = new StringBuffer(); //创建要生成的文本文件名 for (int k = 0; k < names.length; k++) { title.append(names[k]).append("-"); } title.append((new Date()).getTime()); //创建要生成的文件 String path = this.getOutputPath(); bw = new BufferedWriter(new FileWriter(new File(path+title+".txt"))); //获取当前提取页的完整URL地址 int startPos = getInuputFilePath().indexOf("mirror") + 6; String url_seg = getInuputFilePath().substring(startPos); url_seg = url_seg.replaceAll("\\\\", "/"); String url = "http:/" + url_seg; System.out.println(url); //写入当前提取页的完整URL地址 bw.write(url + NEWLINE); for (int k = 0; k < names.length; k++) { bw.write(names[k] + NEWLINE); } } } catch (Exception e) { e.printStackTrace(); } //重置Parser this.getParser().reset(); try { //Parser根据过滤器返回所有满足过滤条件的节点 NodeList attributes_nodes = this.getParser().parse(attributes_filter); for (int i = 0; i < attributes_nodes.size(); i++) { //Parser根据过滤器返回所有满足过滤条件的节点 TableColumn node = (TableColumn) attributes_nodes.elementAt(i); String name = node.getAttribute("class"); //提取属性名信息 String result = node.toPlainTextString(); if( name.equals( new String("td1") )) { bw.write(StringUtils.trim(result) + ":"); } else if( name.equals( new String("td2") )) { bw.write(StringUtils.trim(result) ); bw.newLine(); } // System.out.println(result); //提取属性值信息 // TableColumn nodeExt = (TableColumn) node.getNextSibling(); /* //提取属性名信息 String result = getProp( "<TD CLASS=btd WIDTH=198 BGCOLOR=\"#FCFCFC\"><B>(.*)</B></TD>", node.toHtml(), 1); //属性里面包含有link标签的情况 if (result.indexOf("<") != -1) result = getProp( "<TD CLASS=btd WIDTH=198 BGCOLOR=\"#FCFCFC\"(.*)>(.*)</a></B></TD>", node.toHtml(), 2); //提取属性值信息 TableColumn nodeExt = (TableColumn) node.getNextSibling() .getNextSibling(); */ continue; } } catch (Exception e) { e.printStackTrace(); } // 重置Parser this.getParser().reset(); try { // Parser根据过滤器返回所有满足过滤条件的节点 NodeList image_nodes = this.getParser().parse(image_filter); for (int i = 0; i < image_nodes.size(); i++) { ImageTag node = (ImageTag) image_nodes.elementAt(i); //获取当前节点的SRC属性值 String image_url = node.getAttribute("src"); //提取文件类型 String fileType = image_url.substring(image_url .lastIndexOf(".") + 1); //生成新的图片的文件名 String new_iamge_file = StringUtils.encodePassword( image_url, HASH_ALGORITHM) + "." + fileType; image_url = StringUtils.replace(image_url, "+", " "); //利用mirror目录下的图片生成的新的图片 copyImage(image_url, new_iamge_file); bw.write(image_url + NEWLINE); bw.write(SEPARATOR + NEWLINE); bw.write(new_iamge_file + NEWLINE); System.out.println(image_url); } } catch (Exception e) { e.printStackTrace(); } try{ if (bw != null) bw.close(); }catch(IOException e){ e.printStackTrace(); } } } ----------------------------------------------------------------- 运行结果: ![图片说明](https://img-ask.csdn.net/upload/201611/17/1479316399_534061.png) 文件名中为什么会有回车符。。。。
java里怎么将一个文件保存至另外一个文件里?
小弟在做一个程序时遇到个问题,将文件内容读出并显示到屏幕上,同时复制文件内容到另一个文件中。 我的第一步是用户输入一个txt文档的绝对路径然后再将它的内容在屏幕上显示出来。 这一段代码小弟敲完后可以运行并达到要求。 但是在第二个目标(将这个txt文档复制至新的路径里)遇到问题了,我不知道怎么 让程序可以读取用户刚刚输入的绝对路径再将其复制到一个新的目录里面, 我只能做到在程序里先打好复制文件的原路径与我想要将这个文件复制到哪个目录里 所以我的第一步和第二步脱节了,请大神们帮帮忙 ``` package shiyan3; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.Reader; import java.util.Scanner; public class Notepad { private static String filePath; private static String message =""; public static void main(String[] args) throws Exception { Scanner sc =new Scanner(System.in); System.out.println("1:打开文件 2:复制文件 3:退出"); while (true) { System.out.println("请输入指令"); int command = sc.nextInt(); switch (command) { case 1: openFile(); break; case 2: copyFile(); break; case 3: exit(); break; default: System.out.println("输入错误"); } } } private static void openFile() throws Exception { message = ""; Scanner sc = new Scanner(System.in); System.out.println("请输入打开文件位置:"); filePath =sc.next(); if (filePath!= null && !filePath.endsWith(".txt")) { System.out.println("请选择文本文件!"); return; } FileReader in = new FileReader(filePath); char [] charArray =new char[1024]; int len =0 ; StringBuffer sb = new StringBuffer(); while ((len=in.read(charArray)) !=-1) { sb.append(charArray); } message =sb.toString(); System.out.println("打开文件内容"+"\r\n"+message); in.close(); } public static void copyFile() throws Exception { FileReader reader =new FileReader("D://JAVA//chapter01//src//shiyan3//text.txt"); BufferedReader br = new BufferedReader (reader); FileWriter writer = new FileWriter("D://JAVA//chapter01//src//shiyan3//text1.txt"); BufferedWriter bw = new BufferedWriter(writer); String str; while ((str = br.readLine()) != null) { bw.write(str); bw.newLine(); } br.close(); bw.close(); System.out.println("复制已经完成啦"); } private static void exit() { System.out.println("您已退出系统!"); } } ```
java多线程报错 java.io.IOException: Stream closed
虽然程序可以正确的讲读取到的信息输出到文本文件 但是报错:java.io.IOException: Stream closed 不知道是什么原因 菜鸟请各位帮忙看一下 代码如下: package test; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.Scanner; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class Test implements Runnable{ String lineString; public Test(String line){ this.lineString = line; } static FileWriter writer; static FileReader reader; public static void main(String[] args) throws IOException { try { reader = new FileReader("/Users/tcredit-0002/Desktop/car.txt"); Scanner scanner = new Scanner(reader); String lineString; writer = new FileWriter("/Users/tcredit-0002/Desktop/hebei.txt"); // TODO Auto-generated method stub ExecutorService pool = Executors.newFixedThreadPool(3); while(scanner.hasNext()){ lineString = scanner.nextLine(); pool.execute(new Test(lineString)); } scanner.close(); writer.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override public void run() { try { writeResult(lineString); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static synchronized void writeResult(String lineString) throws InterruptedException{ try { writer.write(lineString+"\r\n"); writer.flush(); System.out.println(lineString); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
JAVA字节流复制文本的内容到另个文本。请大神指点
出现报错byte words[] =new char[1024]; 改后byte words[] =new byte[1024];复制是成功但内容是乱码。 package Test2; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; /** * @param args * 上机练习2:(复制文本文件)247页 */ public class FileInorOut2 { public static void main(String[] args) { //声明流对象 FileInputStream fis=null; FileOutputStream fos=null; try { //1、创建输入流对象,负责读取内容 fis=new FileInputStream("G:/我的青春谁做主.txt"); //2、创建输出流对象,将写入内容 fos=new FileOutputStream("E:/myFile/myPrime.txt"); //3、创建中转站数组,存放每次读取的内容 byte words[] =new byte[1024]; //4、通过循环实现文件读写 while ((fis.read())!=-1) { fis.read (words); //读取文件 fos.write(words,0,words.length);//写入文件 } System.out.println("内容复制成功!"); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ //5、关闭流 try { if (fis!=null) { fos.close(); } if (fos!=null) { fis.close(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
java里复制文件采用多文件写法,为何我无法调用类函数?
小弟在写一个java程序,其中一个要求是可以检索我输入的文件目录以及复制它到 一个新的目录中,我是采用多文件的方式来完成的。但当我运行时却发现我调用的函数却报错。 这是第一个函数,我想法是用菜单的形式,但这句话报错 FileUtils.copySrcPathToDestPath (srcFile, destFile); 这里的FileUtils是我第二个函数,有无大神可以看看 ``` package shiyan3; import java.io.File; import java.io.FileReader; import java.util.Scanner; public class Notepad { private static String filePath; private static String message =""; public static void main(String[] args) throws Exception { Scanner sc =new Scanner(System.in); System.out.println("1:打开文件 2:复制文件 3:退出"); while (true) { System.out.println("请输入指令"); int command = sc.nextInt(); switch (command) { case 1: openFile(); break; case 2: copyFile(); break; case 3: exit(); break; default: System.out.println("输入错误"); } } } private static void openFile() throws Exception { message = ""; Scanner sc = new Scanner(System.in); System.out.println("请输入打开文件位置:"); filePath =sc.next(); if (filePath!= null && !filePath.endsWith(".txt")) { System.out.println("请选择文本文件!"); return; } FileReader in = new FileReader(filePath); char [] charArray =new char[1024]; int len =0 ; StringBuffer sb = new StringBuffer(); while ((len=in.read(charArray)) !=-1) { sb.append(charArray); } message =sb.toString(); System.out.println("打开文件内容"+"\r\n"+message); in.close(); } private static void copyFile() { Scanner sc =new Scanner(System.in); System.out.println("请输入您刚刚打开文件的绝对路径"); String srcDirectory=sc.next(); File srcFile =new File(srcDirectory); if (!srcFile.exists() || !srcFile.isDirectory()) { System.out.println("无效目录"); return; } System.out.println("请输入您想要将文件复制到的位置:"); String destDirectory=sc.next(); File destFile=new File(destDirectory); if(!destFile.exists() || !destFile.isDirectory()) ;{ System.out.println("无效位置!"); return; } FileUtils.copySrcPathToDestPath (srcFile, destFile); } private static void exit() { System.out.println("您已退出系统!"); } } ``` ``` package shiyan3; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; public class FileUtils { 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(); } } } } ```
java中创建一个大小为1M的一个文本文件,如何具体实现代码??求大神代码实现
在java中,创建一个文本文件,然后写入1M的大小内容,然后在读取,可是怎么控制文件大小是1M呢?
io流 数组 文件 之间的问题
麻烦给写一个java读取数组中的数据,输出到本地文本文件中,的demo; 数组大一些,可能放的数据较多,在线等,谢谢
关于java 如何把文本文件转为图片的问题 求大神相助
如何把一个文本文件转为图片样式 这样给手机端 就可以放大看了 不然看不清楚
java 从JTextFiled中读取路径,打开文本
![图片说明](https://img-ask.csdn.net/upload/201706/25/1498370859_433787.png) 就是向图片那样直接从JTextField中读取文件名字或者路径,点击按钮就能打开文本的事件。。。 import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import java.awt.BorderLayout; import java.awt.FileDialog; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JButton; import javax.swing.JFileChooser; import javax.swing.JTextArea; import javax.swing.JTextField; import javax.swing.JLabel; import javax.swing.JScrollPane; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class OpenTxt extends JFrame{ public OpenTxt(){ super("打开文本文件"); this.setLayout(new BorderLayout()); JPanel p1=new JPanel(); JPanel p2=new JPanel(); JButton b=new JButton("打开文本文件"); JLabel l=new JLabel("文本文件名称,位置:"); JTextField txt=new JTextField(20); JTextArea txtContent =new JTextArea(20,10); JScrollPane sp=new JScrollPane(txtContent); p1.add(l); p1.add(txt); this.add(p1,BorderLayout.NORTH); this.add(txtContent, BorderLayout.CENTER); p2.add(b); this.add(p2, BorderLayout.SOUTH); this.setSize(500,600); this.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); b.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ String FileName=txt.getText(); File file=new File(FileName); String path=file.getAbsolutePath(); try { BufferedReader br=new BufferedReader(new FileReader(path)); String result=null; while((result=br.readLine())!=null){ txtContent.append(result); } } catch (FileNotFoundException e1) { e1.printStackTrace(); }catch(IOException e1){ e1.printStackTrace(); } } }); } public static void main(String args[]){ new OpenTxt(); } } 我这种写法只能读取路径,不能直接读取名字~! 求大神指教~~! 谢谢
java从文本中获取内容放入容器中,但是打印容器的时候只打印出了文本最后一行。
**下面两张图是关于我删掉了lines = "";和加了lines += lines;的情况,最下面两行字还有具体解释,谢谢各位能浏览我的问题 ** # 问题出来return值上面,怎么能成功的return lines package hotel1; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import hotel.CloseStreamMethod; public class ImportData{ public ArrayList<Rooms> roomsLists = new ArrayList<Rooms>(); public static void main(String[] args) { ImportData ip = new ImportData(); ip.importRooms(); } public String importData(){ File src = new File("/Users/handsomeboy/eclipse-workspace/Coursework/src/hotel1/rooms.txt"); BufferedReader br = null; String lines = null; try { br = new BufferedReader(new FileReader(src)); String line = null; while((line = br.readLine()) != null) { lines = ""; lines += line; } } catch (IOException e) { e.printStackTrace(); } finally { CloseStreamMethod csm = new CloseStreamMethod(); csm.close(br); } return lines; } public void importRooms() { String[] content = importData().split("\n"); for (String row : content) { if(row != null) { String[] contents = row.split(","); if (contents.length == 5) { roomsLists.add(new Rooms(Integer.parseInt(contents[0]), RoomType.valueOf(contents[1].toUpperCase()), Double.parseDouble(contents[2]), Integer.parseInt(contents[3]),contents[4])); } } } System.out.println(roomsLists); } } 输出内容: [ RoomNumber: 301, Type: FAMILY, Price: 90.0, Capacity: 4, Facilities: own bathroom] 文本内容: 101,double,80.00,2,own bathroom 102,double,80.00,2,own bathroom 103,twin,70.00,2,shared bathroom 104,twin,70.00,2,shared bathroom 201,double,80.00,2,own bathroom 202,single,70.00,1,own bathroom 301,family,90.00,4,own bathroom ![图片说明](https://img-ask.csdn.net/upload/201903/08/1552035252_968222.png)![! ![图片说明](https://img-ask.csdn.net/upload/201903/08/1552035443_138063.png) 加了+号的一开始试过但是没有用,还有不加lines = "";不会打印出字符串,真的试了很多很多方法,但是改不出来,感谢各位能帮忙debug. 补充一下如果不加lines = "";的话就不能return lines,加了才能成功返回lines值,我也不知道什么,如果不加lines = ""; 打印imporData是可以成功答应所有的内容, 但是不能返回lines的值。
写一个Java程序能够找出这两个文本中相同的单词,求帮忙看看哪里错了?
``` package union.practice; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.util.HashSet; import java.util.Set; /** * 有两个文本文件,每一行是一个单词,写一个Java程序能够找出这两个文本中相同的单词。 * 1.需要考虑所有有可能出现的异常,需要有较好的用户体验,出现异常应该有友好的提示信息而不是java中的Exception; * 2.程序尽量简洁高效,要求两个文本中各有10万单词量时,找出相同单词的时间不超过0.5秒; 3.对写的程序要有完整的单元测试代码。 */ public class App { // commonStringSet存储最后结果 public static volatile Set<String> commonStringSet = new HashSet<String>(); public static volatile Set<String> setA = new HashSet<String>(); public static volatile Set<String> setB = new HashSet<String>(); /** * 找出两个文本文件中相同的单词 * * @param file1 * 文件1文件名 * @param file2 * 文件2文件名 * @param destination * 相同文本存储的位置 */ public Set<String> findCommonWordsInTwoFiles(String fileA, String fileB) { //开启两个线程,分别读取两个文件的内容存储到他们对应的HashSet,同时比较当前读取到的内容是否存在于另一线程对应的集合中,如果在,添加到公共集合 final String tempFileA = fileA; final String tempFileB = fileB; Thread tA = new Thread(new Runnable() { public void run() { File fA = new File(tempFileA); try { BufferedReader bfA = new BufferedReader(new FileReader(fA)); // 读取文件1中的内容存储于set1中 String temp = null; while ((temp = bfA.readLine()) != null) { synchronized (setA) { setA.add(temp); } if(setB.contains(temp)) synchronized (commonStringSet) { commonStringSet.add(temp); } } bfA.close(); } catch (FileNotFoundException e) { System.out.println("待查找的文件不存在"); } catch (IOException e) { System.out.println("系统读取文件异常"); } } }); tA.start(); Thread tB = new Thread(new Runnable() { public void run() { File fB = new File(tempFileB); try { BufferedReader bfB = new BufferedReader(new FileReader(fB)); // 读取文件1中的内容存储于set1中 String temp = null; while ((temp = bfB.readLine()) != null) { synchronized (setB) { setB.add(temp); } if(setA.contains(temp)) synchronized (commonStringSet) { commonStringSet.add(temp); } } bfB.close(); } catch (FileNotFoundException e) { System.out.println("待查找的文件不存在"); } catch (IOException e) { System.out.println("系统读取文件异常"); } } }); tB.start(); //等待AB线程执行结束后返回 try { tA.join(); tB.join(); } catch (InterruptedException e) { System.out.println("系统不能处理您的请求"); } return commonStringSet; } } ``` 测试的时候拿已知的HashSet结果与函数返回的结果相比较,但是从运行结果来看,并不总是相等的,我想问题应该是出在同步的层面,求解释(测试时数据量比较大,其中一个文件有10万行,一个文件两百行)
java 如何通过命令行传递一个文本文件名字,进而找到这个类,并读取其中的内容
package chapter22; import java.io.File; import java.io.FileNotFoundException; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import java.util.Scanner; import java.util.Set; public class practice9 { public static void main(String[] args) { if (args.length != 1) { System.out.println("Usage: java practice9 fullfilename"); System.exit(0); } String filename = args[0]; Map<String, Integer> map = new HashMap<String, Integer>(); try { Scanner in = new Scanner(new File(filename)); String line; while ((line = in.nextLine()) != null) { String[] words = line.split("[\t\r\n,.;:!?(){]"); for (int i = 0; i < words.length; i++) if (!map.containsKey(words[i])) map.put(words[i], 1); else map.put(words[i], map.get(words[i]).intValue() + 1); } } catch (FileNotFoundException e) { e.printStackTrace(); } Set<Entry<String, Integer>> entrySet = map.entrySet(); for(Map.Entry<String, Integer> entry:entrySet){ System.out.println(entry.getKey()+entry.getValue()); } } } ![图片说明](https://img-ask.csdn.net/upload/201603/15/1458052906_986471.png)
Java中如何对文本文件进行指定行的覆盖的操作?
rt,我有一个文本文件,想把其中指定的行已经存在的内容替换或者覆盖为其他字符串。 即在这个文本文件中 有一行字符串txx,如何把这个txt字符串替换为另外一个字符串str,其他的内容变, ``` try { File file = new File("D:\\JAVA\\PROJECT\\newstudent.txt"); FileReader fileReader = new FileReader(file); LineNumberReader reader = new LineNumberReader(fileReader); int x=temp+3; //第几行 String txt= ""; for(int i=0;i<=x;i++) { txt=reader.readLine(); } // 建立一个file对象,参数就是你想访问文件的路径 if(oldpara.equals("学号")) { String str=txt.replace(AddInfo.clonum[temp], newpara); JOptionPane.showMessageDialog(null , "学生信息修改成功","提示消息",JOptionPane.WARNING_MESSAGE); System.out.println(str); PrintWriter pw=new PrintWriter(file); pw.println(str); pw.close(); }else if(oldpara.equals("姓名")) { String str=txt.replace(AddInfo.cloname[temp], newpara); JOptionPane.showMessageDialog(null , "学生信息修改成功","提示消息",JOptionPane.WARNING_MESSAGE); System.out.println(str); PrintWriter pw=new PrintWriter(file); pw.println(str); pw.close(); }else if(oldpara.equals("班级")) { String str=txt.replace(AddInfo.clocla[temp], newpara); JOptionPane.showMessageDialog(null , "学生信息修改成功","提示消息",JOptionPane.WARNING_MESSAGE); System.out.println(str); PrintWriter pw=new PrintWriter(file); pw.println(str); pw.close(); }else if(oldpara.equals("电话")) { String str=txt.replace(AddInfo.clotel[temp], newpara); JOptionPane.showMessageDialog(null , "学生信息修改成功","提示消息",JOptionPane.WARNING_MESSAGE); System.out.println(str); PrintWriter pw=new PrintWriter(file); pw.println(str); pw.close(); }else { JOptionPane.showMessageDialog(null , "信息输入错误!请重新输入","提示消息",JOptionPane.WARNING_MESSAGE); } ```
有关java文件读入问题
import java.io.*; import java.util.*; class Main { public static void main(String[] args) throws IOException{ Scanner in=new Scanner(System.in); File file=new File("d:\\myfile.txt"); if(!file.exists()){ file.createNewFile(); } String text=in.next(); file.writeChars(text); } } ```请问这段代码代码有什么错误 要求是 编写程序,创建新的文本文件myfile.txt,从键盘输入内容并写入文件中。 不知道哪里错了 ```
这是一个java 的文件监控目录下的变化,发生变化进行处理。
public void run() { WatchService watchService; try { watchService = FileSystems.getDefault().newWatchService(); Paths.get(watchedPath).register(watchService, StandardWatchEventKinds.ENTRY_CREATE); while(true) { WatchKey key=watchService.take(); for(WatchEvent<?> event:key.pollEvents()) { WatchEvent<Path> ev = cast(event); Path name = ev.context(); if(ftpUser == null || ftpUser.equals("")){ //本地local FtpUtil.copyFile(name.toFile(),localPath,watchedPath); }else{ // FtpUtil.uploadFile(name.toFile(), localPath, "ftp.properties",watchedPath); //ftp FtpUtil.uploadFile(name.toFile(), localPath, ftpUser,watchedPath); //ftp } } boolean reset = key.reset(); if (!reset) break; } } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } /** * 复制单个文件 * @param oldPath String 原文件路径 如:c:/fqf.txt * @param newPath String 复制后路径 如:f:/fqf.txt * @return boolean */ public static void copyFile(File newFile, String newPath,String oldPath) { InputStream inStream = null; FileOutputStream fs = null; try { int bytesum = 0; int byteread = 0; String filePath = oldPath +"\\"+newFile; File oldfile = new File(filePath); if (oldfile.exists()) { // 文件存在时 inStream = new FileInputStream(filePath); // 读入原文件 fs = new FileOutputStream(newPath+"\\"+newFile); byte[] buffer = new byte[1444]; int length; while ((byteread = inStream.read(buffer)) != -1) { bytesum += byteread; // 字节数 文件大小 fs.write(buffer, 0, byteread); } System.out.println("aaa"); } } catch (Exception e) { System.out.println("复制单个文件操作出错"); e.printStackTrace(); }finally{ try { if(null!=fs){ fs.close(); } if(null!=inStream){ inStream.close(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("bbb"); } } java.io.FileNotFoundException: D:\text1\新建文本文档 (2).txt (另一个程序正在使用此文件,进程无法访问。) at java.io.FileInputStream.open(Native Method) at java.io.FileInputStream.<init>(FileInputStream.java:138) at java.io.FileInputStream.<init>(FileInputStream.java:97) at com.rihang.util.FtpUtil.copyFile(FtpUtil.java:143) at com.rihang.publicserviceproduct.FileWatcherThread.run(FileWatcherThread.java:68) 上边是代码和异常,我要做的是,当监控的目录下多了一个文件的时候就将该文件copy 到其他目录下。现在第一次没问题。第二次在放如监控目录下一个文件时就提示这个异常。但是我如果在inStream = new FileInputStream(filePath); 这行打个断点停顿下就没这个问题了。在线求解。
java菜鸟真心求教大神,谢谢!
请大神看看下面的代码,我检查了好几次都没发现错误,为何在编译的时候会出现java找不到符号的情况。。。。代码可能有点长。。。麻烦各位了,谢谢! ``` //测试FileWriter类 public class TestFileWriter { public static void showFile(java.io.File file) { char buff[] = new char[22]; int ret = 0; System.out.println("Showfile begin["+file.getName()+"]:"); java.io.FileReader read_file = null; try { //创建读取文件对象 read_file = new java.io.FileReader(file); do { //读取一段字符,每次22个字符 ret = read_file.read(buff); for (int i=0; i<ret; i++) { System.out.print(buff[i]); //逐个输出读入的字符 } } while (ret!=-1); } catch (java.lang.Exception e) { System.out.println("There must be something wrong!"); } finally { //关闭打开的文件 try { read_file.close(); } catch (java.lang.Exception e) { System.out.println("Ignore the exception when closing."); } } System.out.println("\nshowfile end ["+file.getName()+"]."); } public static void main(String[] argv) { char buff[] = new char[48]; char ch = 'A'; int ret = 0; for (int i=0; i<26; i++) { buff[i] = ch++; //输入A-Z共26个字母到字符数组buff } java.io.File _write = new java.io.File("_write.txt"); java.io.FileWriter write_java = null; try { System.out.println(_write.getName()+"exist?"+_write.exists()); write_java = new java.io.FileWriter("_write.txt"); //创建写入文本的对象 System.out.println(_write.getName()+"exist?"+_write.exists()); write_java.write(buff,0,26); //将buff数组里的内容输出到指定文件 System.out.println(_write.getName()+"exist?"+_write.exists()); //write_java.flush(); write_java.close(); //调用close()会自动执行flush(),如果将这一行放在show_file()方法后面,则show_file()显示文件为空,因为未写入 System.out.println("\nWrite into an empty file."); showFile(_write); //调用show_file()方法 } catch (java.lang.Exception e) { System.out.println("There must be something wrong!"); } finally { try { write_java.close(); } catch (java.lang.Exception e) { System.out.println("Ignore the exception when closing."); } java.io.FileWriter append_java = null; } try { //使用append()方法向文件追加内容 append_java = new java.io.FileWriter(_write); //以普通形式打开,结果依然覆盖原文 append_java.append("Someting appended in the file...."); append_java.close(); System.out.println("\n以普通方式打开,调用append()方法"); showFile(_write); } catch (java.lang.Exception e) { System.out.println("There must be something wrong!"); } finally { try { append_java.close(); } catch (java.lang.Exception e) { System.out.println("Ignore the exception when closing."); } } try { //以追加方式打开文件,并使用append()方法向文件追加内容 append_java = new java.io.FileWriter(_write, true); append_java.write(buff,0,26); append_java.close(); System.out.println("\n以追加模式打开文件,用append()方法追加内容到文件中"); showFile(_write); } catch (java.lang.Exception e) { System.out.println("There must be something wrong!"); } finally { try { append_java.close(); } catch (java.lang.Exception e) { System.out.println("Ignore the exception when closing."); } } try { //以非追加方式打开,并用append()方法向文件追加内容 append_java = new java.io.FileWriter(_write, false); append_java.append(new String(buff).trim()); append_java.close(); System.out.println("\n以非追加方式打开,调用append()方法"); showFile(_write); } catch (java.lang.Exception e) { System.out.println("There must be something wrong!"); } finally { try { append_java.close(); } catch (java.lang.Exception e) { System.out.println("Ignore the exception when closing."); } } _write.delete(); } } ```
Java文本无限增加,死循环的问题?
import java.io.*; import java.util.regex.*; /* 代码功能为实现将网页中的用户名及其发表内容摘取出来 */ public class fileReader { public static void main(String[] args) throws Exception{ BufferedReader br = new BufferedReader(new FileReader("d:/tiezi.txt")); //tiezi.txt为待处理网页源码 BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("d:/repalce"),"utf-8")); //将替换后的源码存入repalce.txt String line = null; while((line=br.readLine())!=null){ while(line.contains("<img username=\"")){//用户名开始字符 //标识符<img username="与标识符" class="" src="http中间为用户名 String username = line.substring(line.indexOf("<img username=\""), line.indexOf("\" class=\"\" src=\"http")); bw.append(username); bw.append('#'); } while(line.contains("class=\"d_post_content j_d_post_content clearfix\">")){ //标识符class="d_post_content j_d_post_content clearfix">与标识符</div><br>中间为用户发表内容 String usertext = line.substring(line.indexOf("class=\"d_post_content j_d_post_content clearfix\">"), line.indexOf("</div><br>")); bw.append(usertext); bw.newLine(); //问题:运行程序后出现文本大小一直在增加,多到15G,直至死机 } } bw.flush(); bw.close(); br.close(); } }
关于Java socket 聊天程序中如何把线程1的文本传到其他线程中
服务器端的代码: package 实验室项目一; import java.io.DataInputStream; import java.io.DataOutputStream; import java.net.ServerSocket; import java.net.Socket; import java.io.IOException; import java.net.InetAddress; public class Server { public static void main(String[] args) { try { //1.创建一个服务器端Socket,即ServerSocket,指定绑定的端口,并监听此端口 ServerSocket serverSocket=new ServerSocket(10086); Socket socket=null; //记录客户端的数量 int count=0; System.out.println("***服务器即将启动,等待客户端的连接***"); //循环监听等待客户端的连接 while(true){ //调用accept()方法开始监听,等待客户端的连接 socket=serverSocket.accept(); //创建一个新的线程 ServerThread serverThread=new ServerThread(socket); //启动线程 serverThread.start(); count++;//统计客户端的数量 System.out.println("客户端的数量:"+count); InetAddress address=socket.getInetAddress(); System.out.println("当前客户端的IP:"+address.getHostAddress()); } } catch (IOException e) { e.printStackTrace(); } } } package 实验室项目一; /** * 服务器线程处理类 */ import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.Socket; public class ServerThread extends Thread { // 和本线程相关的Socket Socket socket = null; public ServerThread(Socket socket) { this.socket = socket; } //线程执行的操作,响应客户端的请求 public void run(){ String msg;//客户端的消息 DataInputStream is=null; DataOutputStream os=null; try { //获取输入流,并读取客户端信息 is = new DataInputStream(socket.getInputStream()); msg=is.readUTF(); //获取输出流,响应客户端的请求 os = new DataOutputStream(socket.getOutputStream()); os.writeUTF(msg);//注意 啊,写到这儿不知道怎么把数据传到其他的线程中 } catch (IOException e) { e.printStackTrace(); }finally{ //关闭资源 try { if(is!=null) is.close(); if(socket!=null) socket.close(); } catch (IOException e) { e.printStackTrace(); } } } }
新登录的用户名怎么判断是否和已登录的用户名重名?
用户1、用户2、用户3、用户4依次登录,再登录用户2怎么判断是否重名 ![图片说明](https://img-ask.csdn.net/upload/202002/13/1581566962_929174.png) ![图片说明](https://img-ask.csdn.net/upload/202002/13/1581566977_484440.png) ``` package Pack; import java.awt.event.*; import java.io.*; import java.net.*; import java.text.*; import java.util.*; import javax.swing.*; import javax.swing.event.*; public class Test { private JFrame jf = null; private JTextField CastIPTxtFiled = new JTextField("228.9.6.8");// 组播IP地址文本框 private JTextField portTxtFiled = new JTextField("8000");// 端口地址文本框 private JTextField nameField = new JTextField("用户");// 用户名文本框 private JTextArea receiveMesArea = new JTextArea();// 接收消息文本域 private JTextArea sendMesArea = new JTextArea();// 发送消息文本域 private JButton startChatBtn = new JButton("开始聊天");// 按钮 private JButton stopChatBtn = new JButton("断开聊天"); private JButton quitBtn = new JButton("退出"); private JButton saveBtn = new JButton("保存"); private JButton cleaBtn = new JButton("清空"); private JButton sendBtn = new JButton("发送"); private JRadioButton groupchatBtn = new JRadioButton("群聊");// 单选按钮 private JRadioButton privatechatBtn = new JRadioButton("私聊"); private ButtonGroup btg = new ButtonGroup(); private JList<String> jlist = new JList<String>();// 列表框 private DefaultListModel<String> dlm = new DefaultListModel<String>();// 用dlm向jlist动态增删用户 private JScrollPane jScrollPane1 = new JScrollPane(receiveMesArea);// 滚动窗口 private JScrollPane jScrollPane2 = new JScrollPane(sendMesArea); private JScrollPane jScrollPane3 = new JScrollPane(jlist); private BroadCast broadCast = null; boolean broadCastIsDisable = true; boolean chitchat = true;// 判断是群聊还是私聊 public void InitFrame() { jf = new JFrame("组播聊天室"); jf.setLayout(null); jf.setSize(650, 530); jf.setLocationRelativeTo(null);// 在屏幕中居中显示 jf.setResizable(false);// 不可调整窗口大小 jf.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);// 标题栏关闭按钮失效 JLabel nameJLabel = new JLabel("用户名"); nameJLabel.setBounds(30, 80, 60, 20); jf.add(nameJLabel); nameField.setBounds(80, 80, 100, 20); jf.add(nameField); JLabel portTxtJLabel = new JLabel("端口地址"); portTxtJLabel.setBounds(300, 20, 60, 20); jf.add(portTxtJLabel); portTxtFiled.setBounds(360, 20, 100, 20); jf.add(portTxtFiled); JLabel CastIPTxtJLabel = new JLabel("组播IP地址"); CastIPTxtJLabel.setBounds(10, 20, 90, 20); jf.add(CastIPTxtJLabel); CastIPTxtFiled.setBounds(80, 20, 100, 20); jf.add(CastIPTxtFiled); startChatBtn.setBounds(220, 80, 100, 20); stopChatBtn.setBounds(360, 80, 100, 20); jf.add(startChatBtn); jf.add(stopChatBtn); JLabel receiveJLabel = new JLabel("接收消息"); receiveJLabel.setBounds(20, 140, 100, 20); jScrollPane1.setBounds(20, 160, 460, 130); jScrollPane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); jf.add(jScrollPane1); jf.add(receiveJLabel); JLabel sendJLabel = new JLabel("发送消息"); sendJLabel.setBounds(20, 300, 100, 20); jScrollPane2.setBounds(20, 320, 460, 100); jScrollPane2.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); jf.add(jScrollPane2); jf.add(sendJLabel); jlist.setModel(dlm); jScrollPane3.setBorder(BorderFactory.createTitledBorder("在线用户列表")); jScrollPane3.setBounds(500, 20, 120, 430); jScrollPane3.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); jf.add(jScrollPane3); quitBtn.setBounds(20, 460, 100, 20); // 退出 jf.add(quitBtn); saveBtn.setBounds(140, 460, 100, 20); // 保存 jf.add(saveBtn); cleaBtn.setBounds(260, 460, 100, 20);// 清空 jf.add(cleaBtn); sendBtn.setBounds(380, 460, 100, 20); // 发送 jf.add(sendBtn); groupchatBtn.setBounds(120, 120, 100, 20); jf.add(groupchatBtn); privatechatBtn.setBounds(320, 120, 100, 20); jf.add(privatechatBtn); btg.add(groupchatBtn); btg.add(privatechatBtn); groupchatBtn.setSelected(true); jf.setVisible(true); // 显示窗口 BtnFalse(); Object1(); receiveMesArea.setEditable(false);// 接收消息文本域不能被编辑 sendBtn.setMnemonic(KeyEvent.VK_ENTER); // 给sendBtn设置快捷键(Alt+Enter) broadCast = new BroadCast(Integer.parseInt(portTxtFiled.getText()), CastIPTxtFiled.getText(), nameField.getText()); startChatBtn.addActionListener(new ButtonAction()); stopChatBtn.addActionListener(new ButtonAction()); groupchatBtn.addActionListener(new ButtonAction()); privatechatBtn.addActionListener(new ButtonAction()); quitBtn.addActionListener(new ButtonAction()); saveBtn.addActionListener(new ButtonAction()); cleaBtn.addActionListener(new ButtonAction()); sendBtn.addActionListener(new ButtonAction()); jlist.addListSelectionListener(new ListSelectionListener() { public void valueChanged(ListSelectionEvent e) { Object2(); } }); } public class ButtonAction implements ActionListener { public void actionPerformed(ActionEvent e) { if (e.getSource().equals(startChatBtn)) { jf.setTitle("当前用户:" + nameField.getText()); startChatBtn.setEnabled(false); BtnTrue(); Object2(); broadCastIsDisable = false; StartChat(); } else if (e.getSource().equals(stopChatBtn)) { jf.setTitle("组播聊天室"); startChatBtn.setEnabled(true); BtnFalse(); Object1(); broadCastIsDisable = true; broadCast.StopChat(); // 用户下线 } else if (e.getSource().equals(groupchatBtn)) { chitchat = true; Object2(); } else if (e.getSource().equals(privatechatBtn)) { chitchat = false; Object2(); } else if (e.getSource().equals(quitBtn)) { if (broadCastIsDisable == false) { broadCast.StopChat(); } System.exit(0); } else if (e.getSource().equals(saveBtn)) { try { SaveScreen(); Object2(); } catch (IOException e1) { e1.printStackTrace(); } } else if (e.getSource().equals(cleaBtn)) { ClearScreen(); Object2(); } else if (e.getSource().equals(sendBtn)) { if (sendMesArea.getText().equals("")) { JOptionPane.showMessageDialog(jf, "请输入需要发送的消息", "提示!!!", JOptionPane.ERROR_MESSAGE); } else { SendMessage(); sendMesArea.setText(null);// 按发送按钮,立即将发送消息文本域内容清空 } Object2(); } } } public void Object1() { nameField.requestFocusInWindow();// 将nameField设置为焦点 nameField.selectAll(); startChatBtn.getRootPane().setDefaultButton(startChatBtn);// 将startChatBtn设置为焦点,按回车相当于鼠标单击 } public void Object2() { sendMesArea.requestFocusInWindow(); } public void BtnTrue() {// 按钮可点击 stopChatBtn.setEnabled(true); sendBtn.setEnabled(true); groupchatBtn.setEnabled(true); privatechatBtn.setEnabled(true); } public void BtnFalse() {// 按钮不可点击 stopChatBtn.setEnabled(false); sendBtn.setEnabled(false); groupchatBtn.setEnabled(false); privatechatBtn.setEnabled(false); } public void StartChat() { // 用户上线开始聊天 String port = portTxtFiled.getText(); String castIp = portTxtFiled.getText(); if (!castIp.equals("") && !port.equals("")) { broadCast = new BroadCast(Integer.parseInt(portTxtFiled.getText()), CastIPTxtFiled.getText(), nameField.getText()); broadCast.start(); // 启动线程 } } public void SendMessage() { if (chitchat == true) { broadCast.SendMessage(sendMesArea.getText().toString()); } else { broadCast.SendMessage("@" + jlist.getSelectedValue() + "#" + sendMesArea.getText().toString()); } } public void SaveScreen() throws IOException { broadCast.SaveScreen(); } public void ClearScreen() { broadCast.ClearScreen(); } public static void main(String[] args) { Test client = new Test(); client.InitFrame(); } public class BroadCast extends Thread { public int port = 0; // 端口地址 String Ip = ""; // 组播IP地址 String name = ""; // 用户名 MulticastSocket multicastSocket = null; boolean StopThread = false; static final char FLAG_CHAT = '#'; static final char FLAG_PM_USER = '@'; static final char FLAG_PM_TEXT = '#'; static final char FLAG_ONLINE = '$'; static final char FLAG_OFFLINE = '&'; static final char FLAG_REQ_ONLINE = '*'; static final char FLAG_ALREADY_ONLINE = '+'; public BroadCast(int port, String Ip, String name) { this.port = port; this.Ip = Ip; this.name = name; } public void SocketSend(String data) // 发送组播消息 { try { byte[] buf = data.getBytes(); DatagramPacket datagramPacket1 = new DatagramPacket(buf, buf.length); InetAddress address = InetAddress.getByName(Ip); datagramPacket1.setAddress(address); datagramPacket1.setPort(port); multicastSocket.send(datagramPacket1); } catch (IOException e) { e.printStackTrace(); } } public void SendMessage(String message) // 发送组播消息 { SocketSend(FLAG_CHAT + this.name + ":" + message); // '#' + this.name + ":" + message } public void SendUserOnline() // 发送用户上线消息 { SocketSend(FLAG_ONLINE + this.name); // '$' + this.name } public void SendUserOffline() // 发送用户下线消息 { SocketSend(FLAG_OFFLINE + this.name); // '&' + this.name } public void ReqOnlineUser() // 请求在线用户 { SocketSend(String.valueOf(FLAG_REQ_ONLINE)); // '*' 请求在线用户 } public void SendAlreadyOnline() // 当前在线用户 { SocketSend(FLAG_ALREADY_ONLINE + this.name); // '+' + this.name } public void StopChat() { SendUserOffline(); // 发送用户下线消息 StopThread = true; // 用户下线 while (StopThread == true) { dlm.removeAllElements(); } } public void PrintMessageWT(String message) // 带时间的消息 { receiveMesArea.append("[" + GetSystemTime() + "] "); receiveMesArea.append(message); receiveMesArea.append("\n"); receiveMesArea.setCaretPosition(receiveMesArea.getText().length()); } public void SaveScreen() throws IOException { // 保存聊天记录 String msg = receiveMesArea.getText(); FileOutputStream Note = new FileOutputStream(this.name + "的聊天记录.txt"); PrintMessageWT("聊天记录保存地址:" + System.getProperty("user.dir") + "\\" + this.name + "的聊天记录.txt"); Note.write(msg.getBytes()); Note.close(); } public void ClearScreen() { receiveMesArea.setText(""); // 清空接收消息文本域内容 } public String GetSystemTime() { SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss"); // 获取当前时间(格式yyyy-MM-dd HH:mm:ss) return sdf.format(new Date()); // 返回当前时间 } public void run() { // 启动线程 try { InetAddress address = InetAddress.getByName(Ip); multicastSocket = new MulticastSocket(this.port); multicastSocket.joinGroup(address); SendUserOnline(); // 发送用户上线消息 ReqOnlineUser(); // 请求在线用户 while (!StopThread) { byte[] buf = new byte[1024]; DatagramPacket datagramPacket = new DatagramPacket(buf, buf.length); if (multicastSocket.isClosed() == false) { multicastSocket.receive(datagramPacket); String string_MS = new String(datagramPacket.getData(), 0, datagramPacket.getLength()); switch (string_MS.charAt(0)) { case (FLAG_ONLINE): // '$' string_MS = string_MS.substring(1, string_MS.length()); // 去掉第一个字符,获取用户名 // dlm.addElement(string_MS); PrintMessageWT("系统提示:" + string_MS + " 上线!"); break; case (FLAG_OFFLINE): // '&' string_MS = string_MS.substring(1, string_MS.length()); dlm.removeElement(string_MS); PrintMessageWT("系统提示:" + string_MS + " 下线!"); break; case (FLAG_REQ_ONLINE): // '*' SendAlreadyOnline(); break; case (FLAG_ALREADY_ONLINE): // '+' string_MS = string_MS.substring(1, string_MS.length()); boolean notfound = true; for (int i = 0; i < dlm.size(); i++) { if (dlm.get(i).equals(string_MS)) { notfound = false; break; } } if (notfound == true) { if (nameField.getText().equals(string_MS)) { JOptionPane.showMessageDialog(jf, "欢迎加入组播聊天室!!!", "提示!!!", JOptionPane.INFORMATION_MESSAGE); } dlm.addElement(string_MS); // receiveMesArea.append("新加入用户:" + string_MS + "\n"); // receiveMesArea.append("目前总人數:" + String.valueOf(dlm.size()) + "\n"); } int max = dlm.size(), min = 0; int ran = (int) (Math.random() * (max - min) + min); jlist.setSelectedIndex(ran); } boolean IsPM1 = false, IsPM2 = false;// 判断是否为私聊,默认不是 int num1 = 0, num2 = 0; if (string_MS.charAt(0) == FLAG_CHAT) {// '#' 判断第一个字符是否相等 string_MS = string_MS.substring(1, string_MS.length());// 去掉第一个字符 for (int i = 0; i < string_MS.length(); i++) {// 私聊,判断@和#在哪个位置,获取姓名 if (string_MS.charAt(i) == FLAG_PM_USER) { // '@' num1 = i + 1; IsPM1 = true;// 是私聊 } if (string_MS.charAt(i) == FLAG_PM_TEXT) { // '#' num2 = i; } } String Chat_UserName = string_MS.substring(num1, num2++);// 获取私聊对象的姓名 if (IsPM1 == true) {// 是私聊 String PM_SenderName = string_MS.substring(0, num1 - 2);// 获取私聊对象的姓名 if (this.name.equals(Chat_UserName)) {// 是和我私聊 PrintMessageWT("私聊消息--> " + PM_SenderName + "@我:" + string_MS.substring(num2, string_MS.length())); } else if (this.name.equals(PM_SenderName)) {// 自己发私聊消息 PrintMessageWT("私聊消息--> " + "我@" + Chat_UserName + ":" + string_MS.substring(num2, string_MS.length())); } else {// 不是和我私聊 IsPM2 = true; } } if (IsPM1 == false && IsPM2 == false) { // 不是私聊 PrintMessageWT(string_MS); } } } } } catch (Exception e) { e.printStackTrace(); } try { multicastSocket.close(); } catch (Exception e) { e.printStackTrace(); } StopThread = false; } } } ```
动态规划入门到熟悉,看不懂来打我啊
持续更新。。。。。。 2.1斐波那契系列问题 2.2矩阵系列问题 2.3跳跃系列问题 3.1 01背包 3.2 完全背包 3.3多重背包 3.4 一些变形选讲 2.1斐波那契系列问题 在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1, F(n)=F(n-1)+F(n-2)(n&gt;=2,n∈N*)根据定义,前十项为1, 1, 2, 3...
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私...
对计算机专业来说学历真的重要吗?
我本科学校是渣渣二本,研究生学校是985,现在毕业五年,校招笔试、面试,社招面试参加了两年了,就我个人的经历来说下这个问题。 这篇文章很长,但绝对是精华,相信我,读完以后,你会知道学历不好的解决方案,记得帮我点赞哦。 先说结论,无论赞不赞同,它本质就是这样:对于技术类工作而言,学历五年以内非常重要,但有办法弥补。五年以后,不重要。 目录: 张雪峰讲述的事实 我看到的事实 为什么会这样 ...
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
Python 植物大战僵尸代码实现(2):植物卡片选择和种植
这篇文章要介绍的是: - 上方植物卡片栏的实现。 - 点击植物卡片,鼠标切换为植物图片。 - 鼠标移动时,判断当前在哪个方格中,并显示半透明的植物作为提示。
防劝退!数据结构和算法难理解?可视化动画带你轻松透彻理解!
大家好,我是 Rocky0429,一个连数据结构和算法都不会的蒟蒻… 学过数据结构和算法的都知道这玩意儿不好学,没学过的经常听到这样的说法还没学就觉得难,其实难吗?真难! 难在哪呢?当年我还是个小蒟蒻,初学数据结构和算法的时候,在忍着枯燥看完定义原理,之后想实现的时候,觉得它们的过程真的是七拐八绕,及其难受。 在简单的链表、栈和队列这些我还能靠着在草稿上写写画画理解过程,但是到了数论、图...
【搞定 Java 并发面试】面试最常问的 Java 并发基础常见面试题总结!
本文为 SnailClimb 的原创,目前已经收录自我开源的 JavaGuide 中(61.5 k Star!【Java学习 面试指南】 一份涵盖大部分Java程序员所需要掌握的核心知识。欢迎 Star!)。 另外推荐一篇原创:终极推荐!可能是最适合你的Java学习路线 方法 网站 书籍推荐! Java 并发基础常见面试题总结 1. 什么是线程和进程? 1.1. 何为进程? 进程是程...
西游记团队中如果需要裁掉一个人,会先裁掉谁?
2019年互联网寒冬,大批企业开始裁员,下图是网上流传的一张截图: 裁员不可避免,那如何才能做到不管大环境如何变化,自身不受影响呢? 我们先来看一个有意思的故事,如果西游记取经团队需要裁员一名,会裁掉谁呢,为什么? 西游记团队组成: 1.唐僧 作为团队teamleader,有很坚韧的品性和极高的原则性,不达目的不罢休,遇到任何问题,都没有退缩过,又很得上司支持和赏识(直接得到唐太宗的任命,既给
shell脚本:备份数据库、代码上线
备份MySQL数据库 场景: 一台MySQL服务器,跑着5个数据库,在没有做主从的情况下,需要对这5个库进行备份 需求: 1)每天备份一次,需要备份所有的库 2)把备份数据存放到/data/backup/下 3)备份文件名称格式示例:dbname-2019-11-23.sql 4)需要对1天以前的所有sql文件压缩,格式为gzip 5)本地数据保留1周 6)需要把备份的数据同步到远程备份中心,假如...
iOS Bug 太多,苹果终于坐不住了!
开源的 Android 和闭源的 iOS,作为用户的你,更偏向哪一个呢? 整理 | 屠敏 出品 | CSDN(ID:CSDNnews) 毋庸置疑,当前移动设备操作系统市场中,Android 和 iOS 作为两大阵营,在相互竞争的同时不断演进。不过一直以来,开源的 Android 吸引了无数的手机厂商涌入其中,为其生态带来了百花齐放的盛景,但和神秘且闭源的 iOS 系统相比,不少网友...
神经⽹络可以计算任何函数的可视化证明
《Neural Networks and Deep Learning》读书笔记第四篇本章其实和前面章节的关联性不大,所以大可将本章作为小短文来阅读,当然基本的深度学习基础还是要有的。主要介绍了神经⽹络拥有的⼀种普遍性,比如说不管目标函数是怎样的,神经网络总是能够对任何可能的输入,其值(或者说近似值)是网络的输出,哪怕是多输入和多输出也是如此,我们大可直接得出一个结论:不论我们想要计算什么样的函数,...
聊聊C语言和指针的本质
坐着绿皮车上海到杭州,24块钱,很宽敞,在火车上非正式地聊几句。 很多编程语言都以 “没有指针” 作为自己的优势来宣传,然而,对于C语言,指针却是与生俱来的。 那么,什么是指针,为什么大家都想避开指针。 很简单, 指针就是地址,当一个地址作为一个变量存在时,它就被叫做指针,该变量的类型,自然就是指针类型。 指针的作用就是,给出一个指针,取出该指针指向地址处的值。为了理解本质,我们从计算机模型说起...
为什么你学不过动态规划?告别动态规划,谈谈我的经验
动态规划难吗?说实话,我觉得很难,特别是对于初学者来说,我当时入门动态规划的时候,是看 0-1 背包问题,当时真的是一脸懵逼。后来,我遇到动态规划的题,看的懂答案,但就是自己不会做,不知道怎么下手。就像做递归的题,看的懂答案,但下不了手,关于递归的,我之前也写过一篇套路的文章,如果对递归不大懂的,强烈建议看一看:为什么你学不会递归,告别递归,谈谈我的经验 对于动态规划,春招秋招时好多题都会用到动态...
程序员一般通过什么途径接私活?
二哥,你好,我想知道一般程序猿都如何接私活,我也想接,能告诉我一些方法吗? 上面是一个读者“烦不烦”问我的一个问题。其实不止是“烦不烦”,还有很多读者问过我类似这样的问题。 我接的私活不算多,挣到的钱也没有多少,加起来不到 20W。说实话,这个数目说出来我是有点心虚的,毕竟太少了,大家轻喷。但我想,恰好配得上“一般程序员”这个称号啊。毕竟苍蝇再小也是肉,我也算是有经验的人了。 唾弃接私活、做外...
字节跳动面试官这样问消息队列:分布式事务、重复消费、顺序消费,我整理了一下
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图、个人联系方式和人才交流群,欢迎Star和完善 前言 消息队列在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在消息队列的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸...
如何安装 IntelliJ IDEA 最新版本——详细教程
IntelliJ IDEA 简称 IDEA,被业界公认为最好的 Java 集成开发工具,尤其在智能代码助手、代码自动提示、代码重构、代码版本管理(Git、SVN、Maven)、单元测试、代码分析等方面有着亮眼的发挥。IDEA 产于捷克,开发人员以严谨著称的东欧程序员为主。IDEA 分为社区版和付费版两个版本。 我呢,一直是 Eclipse 的忠实粉丝,差不多十年的老用户了。很早就接触到了 IDEA...
面试还搞不懂redis,快看看这40道面试题(含答案和思维导图)
Redis 面试题 1、什么是 Redis?. 2、Redis 的数据类型? 3、使用 Redis 有哪些好处? 4、Redis 相比 Memcached 有哪些优势? 5、Memcache 与 Redis 的区别都有哪些? 6、Redis 是单进程单线程的? 7、一个字符串类型的值能存储最大容量是多少? 8、Redis 的持久化机制是什么?各自的优缺点? 9、Redis 常见性...
大学四年自学走来,这些珍藏的「实用工具/学习网站」我全贡献出来了
知乎高赞:文中列举了互联网一线大厂程序员都在用的工具集合,涉及面非常广,小白和老手都可以进来看看,或许有新收获。
为什么要推荐大家学习字节码?
配套视频: 为什么推荐大家学习Java字节码 https://www.bilibili.com/video/av77600176/ 一、背景 本文主要探讨:为什么要学习 JVM 字节码? 可能很多人会觉得没必要,因为平时开发用不到,而且不学这个也没耽误学习。 但是这里分享一点感悟,即人总是根据自己已经掌握的知识和技能来解决问题的。 这里有个悖论,有时候你觉得有些技术没用恰恰是...
互联网公司的裁员,能玩出多少种花样?
裁员,也是一门学问,可谓博大精深!以下,是互联网公司的裁员的多种方法:-正文开始-135岁+不予续签的理由:千禧一代网感更强。95后不予通过试用期的理由:已婚已育员工更有责任心。2通知接下来要过苦日子,让一部分不肯同甘共苦的员工自己走人,以“兄弟”和“非兄弟”来区别员工。3强制996。员工如果平衡不了工作和家庭,可在离婚或离职里二选一。4不布置任何工作,但下班前必须提交千字工作日报。5不给活干+...
【超详细分析】关于三次握手与四次挥手面试官想考我们什么?
在面试中,三次握手和四次挥手可以说是问的最频繁的一个知识点了,我相信大家也都看过很多关于三次握手与四次挥手的文章,今天的这篇文章,重点是围绕着面试,我们应该掌握哪些比较重要的点,哪些是比较被面试官给问到的,我觉得如果你能把我下面列举的一些点都记住、理解,我想就差不多了。 三次握手 当面试官问你为什么需要有三次握手、三次握手的作用、讲讲三次三次握手的时候,我想很多人会这样回答: 首先很多人会先讲下握...
新程序员七宗罪
当我发表这篇文章《为什么每个工程师都应该开始考虑开发中的分析和编程技能呢?》时,我从未想到它会对读者产生如此积极的影响。那些想要开始探索编程和数据科学领域的人向我寻求建议;还有一些人问我下一篇文章的发布日期;还有许多人询问如何顺利过渡到这个职业。我非常鼓励大家继续分享我在这个旅程的经验,学习,成功和失败,以帮助尽可能多的人过渡到一个充满无数好处和机会的职业生涯。亲爱的读者,谢谢你。 -罗伯特。 ...
活到老,学到老,程序员也该如此
全文共2763字,预计学习时长8分钟 图片来源:Pixabay 此前,“网传阿里巴巴要求尽快实现P8全员35周岁以内”的消息闹得沸沸扬扬。虽然很快被阿里辟谣,但苍蝇不叮无缝的蛋,无蜜不招彩蝶蜂。消息从何而来?真相究竟怎样?我们无从而知。我们只知道一个事实:不知从何时开始,程序猿也被划在了“吃青春饭”行业之列。 饱受“996ICU”摧残后,好不容易“头秃了变强了”,即将步入为“高...
Vue快速实现通用表单验证
本文开篇第一句话,想引用鲁迅先生《祝福》里的一句话,那便是:“我真傻,真的,我单单知道后端整天都是CRUD,我没想到前端整天都是Form表单”。这句话要从哪里说起呢?大概要从最近半个月的“全栈工程师”说起。项目上需要做一个城市配载的功能,顾名思义,就是通过框选和拖拽的方式在地图上完成配载。博主选择了前后端分离的方式,在这个过程中发现:首先,只要有依赖jQuery的组件,譬如Kendoui,即使使用...
2019年Spring Boot面试都问了什么?快看看这22道面试题!
Spring Boot 面试题 1、什么是 Spring Boot? 2、Spring Boot 有哪些优点? 3、什么是 JavaConfig? 4、如何重新加载 Spring Boot 上的更改,而无需重新启动服务器? 5、Spring Boot 中的监视器是什么? 6、如何在 Spring Boot 中禁用 Actuator 端点安全性? 7、如何在自定义端口上运行 Sprin...
【图解】记一次手撕算法面试:字节跳动的面试官把我四连击了
字节跳动这家公司,应该是所有秋招的公司中,对算法最重视的一个了,每次面试基本都会让你手撕算法,今天这篇文章就记录下当时被问到的几个算法题,并且每个算法题我都详细着给出了最优解,下面再现当时的面试场景。看完一定让你有所收获 一、小牛试刀:有效括号 大部分情况下,面试官都会问一个不怎么难的问题,不过你千万别太开心,因为这道题往往可以拓展出更多有难度的问题,或者一道题看起来很简单,但是给出最优解,确实很...
关于裁员几点看法及建议
最近网易裁员事件引起广泛关注,昨天网易针对此事,也发了声明,到底谁对谁错,孰是孰非?我们作为吃瓜观众实在是知之甚少,所以不敢妄下定论。身处软件开发这个行业,近一两年来,对...
面试官:关于Java性能优化,你有什么技巧
通过使用一些辅助性工具来找到程序中的瓶颈,然后就可以对瓶颈部分的代码进行优化。 一般有两种方案:即优化代码或更改设计方法。我们一般会选择后者,因为不去调用以下代码要比调用一些优化的代码更能提高程序的性能。而一个设计良好的程序能够精简代码,从而提高性能。 下面将提供一些在JAVA程序的设计和编码中,为了能够提高JAVA程序的性能,而经常采用的一些方法和技巧。 1.对象的生成和大小的调整。 J...
相关热词 c# id读写器 c#俄罗斯方块源码 c# linq原理 c# 装箱有什么用 c#集合 复制 c# 一个字符串分组 c++和c#哪个就业率高 c# 批量动态创建控件 c# 模块和程序集的区别 c# gmap 截图
立即提问