Questions tagged «java»

Java是一种流行的高级编程语言。如果您在使用或理解语言本身时遇到问题,请使用此标签。这个标签很少单独使用,最常与[spring],[spring-boot],[jakarta-ee],[android],[javafx],[gradle]和[maven]结合使用。


14
Windows上可靠的File.renameTo()替代方法?
File.renameTo()看来Java 是有问题的,尤其是在Windows上。如API文档所述, 此方法的行为的许多方面本质上取决于平台:重命名操作可能无法将文件从一个文件系统移动到另一个文件系统,它可能不是原子的,并且如果目标抽象路径名的文件可能无法成功已经存在。应该始终检查返回值,以确保重命名操作成功。 就我而言,作为升级过程的一部分,我需要移动(重命名)可能包含千兆字节数据(很多子目录和大小不同的文件)的目录。移动始终在同一分区/驱动器中完成,因此实际上不需要物理移动磁盘上的所有文件。 这里不应该有任何文件锁定的目录中的内容被移动了,不过,很多时候,renameTo()无法完成其工作,并返回false。(我只是猜测也许某些文件锁在Windows上会任意地到期。) 当前,我有一个使用复制和删除的后备方法,但这很麻烦,因为它可能需要很多时间,具体取决于文件夹的大小。我也在考虑简单地记录一个事实,即用户可以手动移动文件夹,以免潜在地等待数小时。但是正确的方法显然是自动而快速的。 所以我的问题是,您是否知道一种可靠的替代方法,可以在Windows上使用Java(使用普通的JDK或某些外部库)进行快速移动/重命名。或者,如果您知道一种检测和释放给定文件夹及其所有内容(可能是成千上万个单独文件)的文件锁的简便方法,那也可以。 编辑:在这种情况下,似乎我们只是renameTo()通过考虑更多的事情而放弃使用;看到这个答案。
92 java  windows  file  file-io 

12
为什么在没有尝试I / O的情况下不可能检测到TCP套接字已被对等端正常关闭?
作为对最近一个问题的回应,我想知道为什么在Java中如果不尝试在TCP套接字上进行读/写操作就无法检测到套接字已被对等端正常关闭了,这是为什么?不管是使用pre-NIO Socket还是NIO,似乎都是这种情况SocketChannel。 当对等方正常关闭TCP连接时,连接两端的TCP堆栈都会知道这一事实。服务器端(启动关闭操作的服务器)以状态结束FIN_WAIT2,而客户端端(未明确响应关闭操作的服务器)以状态服务器结束CLOSE_WAIT。为什么没有一个方法Socket或SocketChannel可以查询TCP堆栈看到底层的TCP连接是否已经终止?TCP堆栈不提供此类状态信息吗?还是为了避免昂贵地调用内核而做出的设计决定? 在已经发布了该问题的一些答案的用户的帮助下,我认为我知道问题可能来自何处。没有显式关闭连接的那一侧将以TCP状态结束,CLOSE_WAIT这意味着该连接正在关闭过程中,并等待该一侧发出自己的CLOSE操作。我想这是公平的,以至于isConnected收益true和isClosed回报false,但为什么没有像isClosing? 以下是使用pre-NIO套接字的测试类。但是使用NIO可以获得相同的结果。 import java.net.ServerSocket; import java.net.Socket; public class MyServer { public static void main(String[] args) throws Exception { final ServerSocket ss = new ServerSocket(12345); final Socket cs = ss.accept(); System.out.println("Accepted connection"); Thread.sleep(5000); cs.close(); System.out.println("Closed connection"); ss.close(); Thread.sleep(100000); } } import java.net.Socket; public class MyClient { public static …

9
Spring JPA @Query与LIKE
我正在尝试在CrudRepository中创建一个方法,该方法将向我提供用户列表,其用户名类似于输入参数(不仅以它开头,还包含它)。我尝试使用method,"findUserByUsernameLike(@Param("username") String username)"但是正如Spring文档中所述,此方法等于“ where user.username like ?1”。这对我不利,因为我已经告诉过我我试图让所有用户名包含...的用户 我对方法写了一个查询,但它甚至没有部署。 @Repository public interface UserRepository extends CrudRepository<User, Long> { @Query("select u from user u where u.username like '%username%'") List<User> findUserByUsernameLike(@Param("username") String username); } 有人可以帮我吗?
92 java  jquery  sql  spring  jpa 

5
如何从JDBC结果集中获取列数?
我正在使用CsvJdbc(它是用于csv文件的JDBC驱动程序)来访问csv文件。我不知道csv文件包含多少列。如何获得列数?是否有任何JDBC函数?我在java.sql.ResultSet中找不到任何方法。 为了访问文件,我使用类似于CsvJdbc网站上示例的代码。
92 java  jdbc  csv  resultset 

6
HashMap Java 8实现
按照以下链接文档:Java HashMap实现 我对的实现感到困惑HashMap(或更确切地说,是对的增强HashMap)。我的查询是: 首先 static final int TREEIFY_THRESHOLD = 8; static final int UNTREEIFY_THRESHOLD = 6; static final int MIN_TREEIFY_CAPACITY = 64; 为什么以及如何使用这些常量?我想要一些明确的例子。 他们如何通过这种方式获得性能提升? 其次 如果您HashMap在JDK中看到的源代码,则将找到以下静态内部类: static final class TreeNode<K, V> extends java.util.LinkedHashMap.Entry<K, V> { HashMap.TreeNode<K, V> parent; HashMap.TreeNode<K, V> left; HashMap.TreeNode<K, V> right; HashMap.TreeNode<K, V> prev; boolean red; TreeNode(int …

5
使用Java日志记录API时如何禁用默认控制台处理程序?
嗨,我正在尝试在我的应用程序中实现Java日志记录。我想使用两个处理程序。文件处理程序和我自己的控制台处理程序。我的两个处理程序都工作正常。我的日志记录发送到文件和控制台。我的日志记录也发送到我不想要的默认控制台处理程序。如果运行我的代码,您会看到发送到控制台的另外两行。我不想使用默认的控制台处理程序。有谁知道如何禁用默认控制台处理程序。我只想使用我创建的两个处理程序。 Handler fh = new FileHandler("test.txt"); fh.setFormatter(formatter); logger.addHandler(fh); Handler ch = new ConsoleHandler(); ch.setFormatter(formatter); logger.addHandler(ch); import java.util.Date; import java.util.logging.ConsoleHandler; import java.util.logging.FileHandler; import java.util.logging.Formatter; import java.util.logging.Handler; import java.util.logging.Level; import java.util.logging.LogManager; import java.util.logging.LogRecord; import java.util.logging.Logger; public class LoggingExample { private static Logger logger = Logger.getLogger("test"); static { try { logger.setLevel(Level.INFO); Formatter formatter …

3
如何创建用于Spring安全性表达语言注释的自定义方法
我想创建一个类,该类添加用于Spring安全表达语言的自定义方法,以通过注释进行基于方法的授权。 例如,我想创建一个自定义方法,例如“ customMethodReturningBoolean”,以这种方式使用: @PreAuthorize("customMethodReturningBoolean()") public void myMethodToSecure() { // whatever } 我的问题是这个。如果可能的话,我应该子类化什么类来创建我的自定义方法,我该如何在spring xml配置文件中对其进行配置,然后有人给我一个以这​​种方式使用的自定义方法的示例?

1
在冬眠中将枚举映射到字符串
我有一个类别休眠模型: @Entity @Table(name = "category") public class Category { @Id @GeneratedValue(strategy=GenerationType.AUTO) @Column(name = "id") private long id; @Column(name = "type") private String type; 其中有一个类型字符串字段。另外,我还有一个Java枚举,它表示类别的类型: public enum CategoryType { INCOME, OUTCOME; } 我想用它代替字符串类型。SQL在varchar参数中接受两个不同的值:CategoryIncome或CategoryOutcome。我希望Category模型类接受一个枚举变量-并在休眠状态下以某种方式将其映射到字符串。 可能吗?
92 java  hibernate  enums 

1
HashSet <T> .removeAll方法出奇的慢
乔恩·斯凯特(Jon Skeet)最近在他的博客上提出了一个有趣的编程主题:“我的抽象中有一个漏洞,亲爱的Liza,亲爱的Liza”(强调): 我有一套- HashSet实际上。我想从中删除一些项目……许多项目可能不存在。实际上,在我们的测试案例中,“删除”集合中的所有项目都不在原始集中。这听起来(确实是)非常容易编码。毕竟,我们Set&lt;T&gt;.removeAll需要帮助我们,对吧? 我们在命令行上指定“源”集的大小和“删除”集合的大小,然后构建它们两者。源集仅包含非负整数;清除集仅包含负整数。我们将使用来测量删除所有元素所需的时间System.currentTimeMillis(),这并不是世界上最精确的秒表,但是在这种情况下,这已经足够了。这是代码: import java.util.*; public class Test { public static void main(String[] args) { int sourceSize = Integer.parseInt(args[0]); int removalsSize = Integer.parseInt(args[1]); Set&lt;Integer&gt; source = new HashSet&lt;Integer&gt;(); Collection&lt;Integer&gt; removals = new ArrayList&lt;Integer&gt;(); for (int i = 0; i &lt; sourceSize; i++) { source.add(i); } for (int i …


8
在Java中获取登录用户名
如何获取Java中的用户名/登录名? 这是我尝试过的代码... try{ LoginContext lc = new LoginContext(appName,new TextCallbackHandler()); lc.login(); Subject subject = lc.getSubject(); Principal principals[] = (Principal[])subject.getPrincipals().toArray(new Principal[0]); for (int i=0; i&lt;principals.length; i++) { if (principals[i] instanceof NTUserPrincipal || principals[i] instanceof UnixPrincipal) { String loggedInUserName = principals[i].getName(); } } } catch(SecurityException se){ System.out.println("SecurityException: " + se.getMessage()); } 我SecurityException在尝试运行此代码时得到提示。有人可以告诉我我是否朝着正确的方向前进,并帮助我理解问题。
92 java  username 

3
如何在Intellij IDEA中使用正则表达式将大写字母替换为小写字母?
我已经为此进行了谷歌搜索,并发现如何与其他正则表达式解析器一起使用: http://vim.wikia.com/wiki/Changing_case_with_regular_expressions http://www.regular-expressions.info/replacecase.html 我已经尝试了这些,但都没有用。例如,我想使用正则表达式来更改此设置: private String Name; private Integer Bar = 2; 对此: private String name; private Integer bar = 2; 我尝试过这样的事情: replace: private (\S+) (\S+) with: private $1 $L$2 with: private $1 \L$2 with: &lt;etc.&gt; 他们都不工作。是否可以在intellij中执行此操作,或者这是缺少的功能?这仅出于教育目的,该示例是人为设计的。我只想知道在intellij中是否可以这样做。

8
Java套接字API:如何判断连接是否已关闭?
我遇到了Java套接字API的一些问题。我正在尝试显示当前连接到我的游戏的玩家数量。很容易确定播放器何时连接。但是,似乎似乎很难确定何时使用套接字API断开了播放器。 呼叫isConnected()已断开远程似乎总是返回一个插座上true。同样,调用isClosed()已远程关闭的套接字似乎总是会返回false。我读过要真正确定套接字是否已关闭,必须将数据写入输出流,并且必须捕获异常。这似乎是处理这种情况的一种非常不干净的方法。我们只需要不断地在网络上发送垃圾邮件来知道套接字何时关闭。 还有其他解决方案吗?

5
从数组流传输时,为什么不能将整数映射到字符串?
这段代码有效(取自Javadoc): List&lt;Integer&gt; numbers = Arrays.asList(1, 2, 3, 4); String commaSeparatedNumbers = numbers.stream() .map(i -&gt; i.toString()) .collect(Collectors.joining(", ")); 这是无法编译的: int[] numbers = {1, 2, 3, 4}; String commaSeparatedNumbers = Arrays.stream(numbers) .map((Integer i) -&gt; i.toString()) .collect(Collectors.joining(", ")); IDEA告诉我,“ lambda表达式中的返回类型字符串不兼容”。 为什么呢 以及如何解决?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.